Content-Length: 237164 | pFad | http://b.hatena.ne.jp/W53SA/go/http/

[B! go][http] W53SAのブックマーク

タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

goとhttpに関するW53SAのブックマーク (5)

  • Goのhttp.RoundTripperでレート制御とリトライの機能を追加する方法

    はじめに Goで外部へhttpリクエストを行う際には、多くの場合でnet/httpを利用すると思います。 net/httpには通常利用する分には必要な機能が備わっていますが、独自に拡張して使いたい場合はhttp.RoundTripperというインターフェースを利用できます。 利用方法の解説としては、こちらの「Go http.RoundTripper 実装ガイド」という記事に詳細に解説がありましたので参考にさせて頂き、 今回はより具体的な利用例にフォーカスして実装例を交えて紹介したいと思います。 やりたいこと 素のnet/httpではリクエストがエラーになった際のリトライや、秒間リクエストの最大値を制限するようなレート制御の機能はありません。 なので今回は、 リトライ処理 レート制御 この2つをhttp.RoundTripperを使って拡張実装したいと思います。 ※今回のサンプルコードの完成

    Goのhttp.RoundTripperでレート制御とリトライの機能を追加する方法
    W53SA
    W53SA 2023/10/06
  • Goのnet/httpのclientでなぜresponseBodyをClose、読み切らなくてはいけないのか

    いきなり結論 結論としては、 responseBodyをCloseしないとコネクションがブロックしてしまい再利用されず、古い接続が残ったまま、新しく接続するたびに新しいGoroutineとファイルディスクリプタを作ってしまう responseBodyを読み切らないとkeepAliveされずコネクションが終了してしまい再利用されず、接続のたびに新しい接続を作ってしまう。 ということなのですが、コードではどうなっているか見てみましょう。 http.Get ~ client.sendまで http.Get -> client.Get -> client.Do -> client.sendまで http.Get func Get(url string) (resp *Response, err error) { return DefaultClient.Get(url) } ここのDefaultC

    Goのnet/httpのclientでなぜresponseBodyをClose、読み切らなくてはいけないのか
    W53SA
    W53SA 2023/10/04
  • Goのリトライ処理で考慮すること

    概要 動機 サービス間通信でリトライ処理をする必要があります。なぜなら、一時的な通信先の不具合など、しばらくしてから再実行することで成功する場合があるからです。しかし、Goの標準パッケージからはリトライ機構は提供されていないので、自身で実装するか他のパッケージを利用しなければなりません。 ここでは具体的な実装例ではなく、net/httpパッケージの実装(主に、http.Clientとhttp.Transport)を踏まえた上で、何がリトライ処理で考慮されているべきかを整理しました。 要約 リトライ処理を実装する場合は以下の観点を考慮する必要があります。 リクエストの内容(Request.Body)をリトライ前に巻き戻す Request.Context()の終了を確認する リトライ前にResponse.Bodyを全て読み切ってから閉じる デフォルトのTransportを使ってコネクションプー

    Goのリトライ処理で考慮すること
    W53SA
    W53SA 2021/12/03
  • Goのバイナリに静的ファイルを埋め込むツール assets-life を書いた

    語の Go コミュニティだと go-bindata (なんか乗っ取り騒動とか色々あってメンテナンスされてない), go-assets (最近メンテナンス滞りがち) が有名(要出典)なやつです。 これらのライブラリに関してたくさん日語記事が書かれて、今もたくさん検索に引っかかるのですが、残念ながら最近はメンテナンスが滞っています。 最近は statik の名前もよく見るようになりました。 その他は Resource Embedding - Awesome Go からどうぞ。 で、まあ、今回も完全に車輪の再発明なんですが、他の実装には色々と思うところがあり書いてみました。 shogo82148/assets-life USAGE なにはともあれ、まずは go get してきます。 $ go get github.com/shogo82148/assets-life assets-life

    W53SA
    W53SA 2019/07/25
    “そうでもないな、と思った人も 「最終更新日時からの経過時間の10%を、キャッシュの寿命に設定する」 HTTPクライアントが存在するっていうことだけは覚えて帰ってね。”
  • net/httpで作るGo APIサーバー #1

    GoにはWebサービスを作るためのフレームワークがそれなりの数存在している。 Awesome Go - Web Frameworks ただ、そこまでデファクトというものがあるわけではなく、他の言語と比べると少々乱立気味なのではないかな、という感想を持っている。この記事ではnet/httpを主軸に据え、取替可能な部品となるライブラリを利用してAPIサーバーを作成する方法を紹介する。 長くなりそうなので記事を分けて紹介する予定だけど、今日はアプリケーショングローバルな値をどのように保持するのが良いのかについて書く。 アプリケーショングローバルな値 APIサーバーにはそのアプリケーションにおいてグローバルな値を保持しておきたいケースが多い。例えばAPIサーバーの設定情報だったり、外部APIにアクセスするクライアントだったり、DBへのコネクションだったり、loggerだったり。そういったものを初期

    W53SA
    W53SA 2017/04/03
  • 1








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://b.hatena.ne.jp/W53SA/go/http/

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy