エンジニアはこわくない

好きなように書く

一度go getしたパッケージを更新(アップデート)する方法


スポンサーリンク

f:id:tsujitaku50:20170224131252j:plain

golangを使用していて稀にあるのですが、ローカルにあるパッケージが古い場合があります。

そんなときにgo getしたパッケージを漏れなく全部削除してもう一度最新のパッケージをgo getして・・・なんてことをするのか?

と思ったのですが、そんなことはしなくていいみたいです。

-uオプション

go getには様々なオプションがあります。

その中の1つに「u」オプションが存在します。

この「u」オプションがどんなものかと言うと、

% go get --help
usage: get [-d] [-f] [-fix] [-insecure] [-t] [-u] [build flags] [packages]

・・・

The -u flag instructs get to use the network to update the named packages
and their dependencies.  By default, get uses the network to check out
missing packages but does not use it to look for updates to existing packages.

・・・

google翻訳にかけると、

-uフラグは、指定されたパッケージを更新するためにネットワークを使用するように指示します。
およびそれらの依存関係。デフォルトでは、getはネットワークを使ってチェックアウトします
パッケージを見つけられませんが、既存のパッケージの更新を探すためには使用しません。

なんかパッケージを更新してくれるっぽい!

ということで試してみました。

試してみる

今回は昔にgo getしたdepパッケージを対象にしてみました。

とりあえず現在の状況を確認します。

% ls -l ~/.go/bin/dep
-rwxr-xr-x  1 xxx  wheel  9776276  2 24  2017 /Users/xxx/.go/bin/dep

日付を確認すると、2017年の2月24日くらいにgo getしたようです。

もう覚えてないですが・・・

次に-uオプションを使ってdepパッケージを更新します。

% go get -u github.com/golang/dep/cmd/dep

更新が完了したので、再度depパッケージを確認します。

% ls -l ~/.go/bin/dep
-rwxr-xr-x  1 xxx  wheel  12307540 12 27 00:38 /Users/xxx/.go/bin/dep

2017年12月27日になっています!

無事に更新されているようです!

まとめ

一度go getしたパッケージを更新したい場合は-uオプションを使いましょう。

おわり!!

というか、だいたいのREADMEには

go get -u xxx

って書いてますよね笑