go は依存関係管理の問題を長い間検討しており、組み込みの go を備えています。 get
コマンドを使用すると、対応する依存関係を直接取得でき、非常に便利ですが、大きな欠陥があります。バージョンの保守と管理がなく、一貫性のないバージョンはさまざまな互換性の問題を引き起こす可能性があるため、多くのサードパーティの依存関係管理が必要です。 go 1.11 では、公式はついに独自の依存関係管理ツール mod
をリリースし、それをgo バージョン。go mod
使いやすく、強力で、以前のほとんどのサードパーティ ツールと自動的に互換性があります。多数の優れたオープン ソース ライブラリが go mod
に切り替えられました。世界を統一する可能性を秘めていますGO111MODULE
最大の変更の 1 つは、golang プロジェクトがついに
ディレクトリに依存しなくなったことです。以前のプロジェクトでは、
import メカニズムの問題で、すべてのプロジェクトは $GOPATH/src
ディレクトリにありました。大きな問題はありませんが、常に奇妙に感じます。go 1.11 では最終的にこの問題を調整し、コードを移動しました$GOPATH
より 以前の R&D モードとの互換性を保つために、$GOPATH
の下に配置し、GO111MODULE
環境変数を通じて制御することが引き続きサポートされています##GO111MODULE=off
: MOD をオフにし、
- ディレクトリと
- $GOPATH
パス
で依存関係を探します。GO111MODULE=on
:
go.mod にのみ基づいて MOD をオンにします。 依存関係をダウンロードして見つけます -
GO111MODULE=auto
:デフォルト値、
$GOPATH 以外のパスにあり、 - go が含まれています。 go project、新しいプロジェクトを作成するときにのみ実行する必要があります。
go mod init
の後、ライブラリが更新されるたびに、最初に対応するライブラリをコードにインポートするだけで済みます。を実行し、
go mod tiny
( go mod download
- ライブラリ バージョンの置き換え
-
手動で変更します
go.mod ファイルの require フィールドを指定して、 - go mod tiny## を再実行します。
#<pre class="brush:php;toolbar:false">go mod init # 在新的 go 项目中执行,自动分析依赖,创建 go.sum go mod tidy # 自动分析依赖,并自动添加和删除依赖 go mod vendor # 创建 vendor 目录,将依赖拷贝到当前的 vendor 文件夹下 go mod download # 手动下载依赖</pre>
golang のバージョンには、## で始まる 3 桁のバージョン番号が使用されます。 #v。最初のものは、書籍のメジャー アップデートを示します。ライブラリの
v2 がリリースされたバージョンでは、
を
に変更する必要があります。 module my-module/v2、それ以外の場合は、ライブラリを導入するときに incompatibility
サフィックス <pre class="brush:php;toolbar:false">require (
github.com/gin-gonic/gin v1.4.0
)</pre>
GFW 問題の解決
いくつかの理由により、国内ネットワークは golang.org のライブラリにアクセスできません。幸いなことに、ほとんどのライブラリには github にミラーがあり、replace
コマンドを使用してミラーをセットアップできます。ここでは私が見つけたライブラリをいくつか紹介します <pre class="brush:php;toolbar:false">require (
github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible
)</pre>
GO 1.12 以降では、新しい環境変数 GOPROXY がサポートされており、依存プロキシ アドレスの設定に使用されます。共有アドレスは 2 つあります: Communitygoproxy.io
と Youpaiyun の goproxy.cn
、個人的にテスト済みで使いやすい <pre class="brush:php;toolbar:false">replace (
cloud.google.com/go => github.com/googleapis/google-cloud-go v0.0.0-20190603211518-c8433c9aaceb
go.etcd.io/bbolt => github.com/etcd-io/bbolt v1.3.4-0.20191001164932-6e135e5d7e3d
go.uber.org/atomic => github.com/uber-go/atomic v1.4.1-0.20190731194737-ef0d20d85b01
go.uber.org/multierr => github.com/uber-go/multierr v1.2.0
go.uber.org/zap => github.com/uber-go/zap v1.10.1-0.20190926184545-d8445f34b4ae
golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190605123033-f99c8df09eb5
golang.org/x/exp => github.com/golang/exp v0.0.0-20190510132918-efd6b22b2522
golang.org/x/image => github.com/golang/image v0.0.0-20190523035834-f03afa92d3ff
golang.org/x/lint => github.com/golang/lint v0.0.0-20190409202823-959b441ac422
golang.org/x/mobile => github.com/golang/mobile v0.0.0-20190607214518-6fa95d984e88
golang.org/x/net => github.com/golang/net v0.0.0-20190606173856-1492cefac77f
golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20190604053449-0f29369cfe45
golang.org/x/sync => github.com/golang/sync v0.0.0-20190423024810-112230192c58
golang.org/x/sys => github.com/golang/sys v0.0.0-20190602015325-4c4f7f33c9ed
golang.org/x/text => github.com/golang/text v0.3.2
golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4
golang.org/x/tools => github.com/golang/tools v0.0.0-20190608022120-eacb66d2a7c3
google.golang.org/api => github.com/googleapis/google-api-go-client v0.6.0
google.golang.org/appengine => github.com/golang/appengine v1.6.1
google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190605220351-eb0b1bdb6ae6
google.golang.org/grpc => github.com/grpc/grpc-go v1.21.1
)</pre>
キャッシュ
go mod は依存関係を更新した後にローカルにキャッシュします。キャッシュ パス
$GOPATH/pkg/modIDE サポート
golandMOD 構成を有効にする
[Goland]→[設定] → [Go モジュール (vgo)] → [Go モジュールを有効にする (vgo)] → [OK]
MOD を有効にすると、goland は依存関係を自動的にチェックし、依存ライブラリを導入するために go.sum を自動的に更新します。通常の状況ではうまく動作しますが、場合によっては動作しないこともあります。手動で実行
go mod tinyvscode
vscode は自動的に更新されないようです。手動で実行してください。
go mod tiny有効になります。再起動後
#リンク #公式 Web サイト: https://blog.golang.org/using-go-modulesGo モジュール: https://blog .csdn.net/ytd7777/article/details/86898187goproxy.io: https://goproxy.io/