aws-sdk-goで帯域制限(概要編)
この記事について
概要編として、やったことをかいつまんで書きます。また、コードの整頓などをしたら後日詳細編を書きます。
やったこと
- https://docs.aws.amazon.com/sdk-for-go/api/aws/#Configここにある通り、
HTTPClient
でnet.http.Client
を指定すればそのクライアントを使って通信ができる。 - https://golang.org/pkg/net/http/#Clientこの
Transport
をオーバーライドする- Http.Transportをembedした独自構造体で、RoundTripをオーバーライドし、http.Request.Bodyをオーバーライドすることで実現できた。
おわりに
多分これを見ただけで分かる人もいると思ったのでとりあえず概要編として出しました。
もしよくわからんという方は急かしていただくか、twitterかslackで教えて下さい。
GoのModuleの落とし穴
golangのエンジニアが一度は陥る罠についてご紹介
githubのライブラリには気をつけろ!
みなさんgithubにあるライブラリを使っていると思います。でもちょっとまってください。もしかして、今見てるソースコードのまま使えると思ってませんか?
go mod init go build main.go
なんてのはよくやると思います。最新のやつでええやんと思ってそのままビルドするアレです。
でも実はコレが罠です。
go mod init
をするとgithubのmasterリポジトリから取ってきてくれるとみんな信じ込んでいますが、実はそうではないです。
リリースタグのついたバージョン
があればそれが使用されます。
つまりどういうことかと言うと
これを使ってみて下さい。リリースされているのでgo mod init
とgo build
を行うとv1.0.0がダウンロードされて使用されます。
それで何が問題かというと、実はこのv1.0.0はage
の値が100
で固定されているのです。最新のソースだとそれは修正されてますが、未リリースの状態です。
実際に使ってみるとおかしい事に気がつくかと思います。
みなさんも今使っているgithubのライブラリが自分の認識している通りのソースかどうか確認してみましょう。
$GOPATH/go/pkg/mod/
以下に格納されているので見てみることをオススメします。
githubで見ているソースのバージョンにしたい!
もちろん僕もそう思ったので一応やり方はわかりました。
... go 1.13 require github.com/rssh-jp/go-releasetest 4667d47
go.modの中身を↑の様に、自分の指定したいリビジョンに変更してgo build
すると指定したリビジョンのソースがダウンロードされて使用されます。
これで事なきを得ました。めでたしめでたし。
最後に
ただ、もっと素敵な、最新のリビジョンを指定できるような方法があるとも思っているので、golangに詳しい方、ぜひ教えて下さい!
NodeでRedis
npm install redis
でインストールされるredis、これのバージョンが
0.8.2
だとpublishで問題が発生したが、
2.4.2
では問題が発生しないので、それにアップグレードしようかなと。