いろいろ備忘録日記

主に .NET とか Go とか Python絡みのメモを公開しています。

Goメモ-34 (モジュールの新しいバージョンをリリースしたのに go list -u -m all しても反映されない件)

概要

自分的に少しハマったので忘れないうちにメモメモ。

自作のモジュールを作っていて、それを利用するプログラムも書いていたとします。

モジュールの方に更新入れたので

$ git add .
$ git commit -m "更新した"
$ git push origin master
$ git tag v1.1.1
$ git push origin v1.1.1

ってして、新しいバージョンをリリースしました。

んで、利用している側 (こっちは、一つ前のバージョンの v1.1.0 を使っているとします) で

$ go list -u -m all

ってしても、

path/to/module v1.1.0

って出てくる。。あれ、新しいバージョンをリリースしたので

path/to/module v1.1.0 [v1.1.1]

を期待していたのですが、、、。

$ go get -u path/to/module

ってしても何もでてこない。

えーって思って、

$ go get -u path/to/module@v1.1.1

ってやると、取得できて更新できる。でもこれがやりたいわけじゃない。

で、10分くらいすると

$ go list -u -m all
path/to/module v1.1.0 [v1.1.1]

って出てきた。なんで? Go1.13にしてからこうなりました。

原因は GOPROXY に設定されている値

そういえば、Go1.13からモジュールのミラーリングサービスが正式稼働したとの情報をどっかで見た記憶。

blog.golang.org

んで、

proxy.golang.org

見てみると、FAQに書いてあったw

I committed a new change (or released a new version) to a repository, why isn't it showing up when I run go get -u or go list -m --versions?

In order to improve our services' caching and serving latencies, new versions may not show up right away. If you want new code to be immediately available in the mirror, then first make sure there is a semantically versioned tag for this revision in the underlying source repository. Then explicitly request that version via go get module@version. After one minute for caches to expire, the go command will see that tagged version. If this doesn't work for you, please file an issue.

なるほど。なので、ちょっと反映されるまで時間がかかってたんですね。

$ go env GOPROXY

ってしてみると

https://proxy.golang.org,direct

ってなってました。納得。先にミラーサイト見るようになってる。

ミラーサイト経由しないように設定してみる

理由はわかったけど、自分のライブラリなので、リリースしたらすぐに反映されてほしい。

てことで、GOPROXYの値を変更してみます。こういうものは、先頭から順に見ていくようになっているので、最初のproxyサイトのurlがなくなれば、directなので直接見に行くようになるはず。

$ go env -w GOPROXY=direct

変更してから、ライブラリのバージョンをアップしてリリースしてみます。

$ git add .
$ git commit -m "もいっかい更新した"
$ git push origin master
$ git tag v1.1.2
$ git push origin v1.1.2

その後すぐに利用している側のモジュールから

$ go list -u -m all

ってすると

path/to/module v1.1.1 [v1.1.2]

って出たー。。当然、go get -uしても更新されました。

よく情報追いかけていれば、すぐに分かったことなんですが怠ると駄目ですねやっぱり。。

変更した GOPROXY をデフォルト値に戻す

go env -w で変更した値を元に戻すには

$ go env -u GOPROXY

ってやります。これで、値がデフォルト値に戻ります。

参考情報

blog.golang.org

proxy.golang.org

github.com

text.baldanders.info

上のミラーリングサービス開始の公式ブログの内容を、とてもわかり易く説明してくださってました。助かりました。


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com