Goはサードパーティのパッケージをどのように更新しますか?


189

golangパッケージがどれだけ活発に成長し、改善しているかを見て、パッケージバージョンの問題がどのように解決されるのでしょうか。

サードパーティのパッケージをプロジェクトフォルダーの下に保存するのが1つの方法だと思います。

しかし、それを一緒にインストールするとgo getどうなりますか?

回答:


308

go getでリストされている最初のディレクトリGOPATH(コロンで区切られたディレクトリのリストを含む可能性のある環境変数)にパッケージをインストールします。を使用go get -uして、既存のパッケージを更新できます。

を使用go get -u allして、GOPATH

大規模なプロジェクトの場合、プロジェクトAでライブラリを更新してもプロジェクトBで問題が発生しないように、プロジェクトごとに異なるGOPATHを作成するのが妥当な場合があります。

入力go help gopathして、GOPATH環境変数の詳細を確認します。


2
バンドルの更新のように、すべてのパッケージを最新バージョンに更新することは可能ですか?
チョウロビン2013年

73
ちょうどあるべきgo get -u all 復活して申し訳ありませんが、念のために誰を探していました。
ダンアンダーソン

go get -u all動作しなくなりました!GOPATHでこのコマンドを実行すると、少なくともGo 1.13の場合、次の警告が返されます
。`warning

Go 1.12.9で動作します
fviktor

61

@tuxの回答は素晴らしいです。特定のパッケージを更新するために使用できることを追加したかっただけです。

go get -u full_package_name

18

質問には、すべてのパッケージではなくサードパーティのライブラリが含まれているため、ワイルドカードの使用にフォールバックすることをお勧めします。

使用例:Github VCSから取得したすべてのパッケージを更新したい場合、次のように言うだけです。

go get -u github.com/... // ('...' being the wildcard). 

これは先に進み、現在のgithubパッケージのみを更新します $GOPATH

同じことがVCS内にも当てはまります。依存する修正プログラムをリリースしたため、ogranizaiton Aのリポジトリからすべてのパッケージのみをアップグレードしたいとします。

go get -u github.com/orgA/...

11

上記の回答には次の問題があります。

  1. アプリを含むすべてを更新します(コミットされていない変更がある場合)。
  2. 彼らはあなたがすでにあなたのプロジェクトから削除したかもしれないがすでにあなたのディスクにあるパッケージを更新しました。

これらを回避するには、次のようにします。

  1. 更新するサードパーティのフォルダを削除します。
  2. アプリのフォルダーに移動して実行します go get -d

1

行く1.13

(モジュールのルートディレクトリから実行)

指定した依存関係を更新します。

go get -u <package-name>

すべての直接および間接の依存関係を最新のマイナーまたはパッチアップグレードに更新します(プレリリースは無視されます)。

go get -u ./...
# or
go get -u=patch ./...

参照:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get



-2

パスに移動して入力

go get -u ./..

すべての必要なパッケージを更新します。


この文字どおりの解釈は機能しません。もう少しコンテキストが参考になります。
Contrapak

2
私は彼が意味したと思いますgo get -u ./...(3ドット)
ブライアンリーシュマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.