Goの依存性の管理
History
~ v1.10
GOPATH内でのみ管理されます.
$GOPATH/srcサブディレクトリでのみプロジェクトを作成できます.
依存性の解決方法外部パッケージをベンダーディレクトリに保存し、構築に参加します. ドッキングイメージでは、パッケージをGOPATHに格納し、ドッキングイメージとして管理します. v1.11 ~ v1.12
Goモジュールはオプション機能として登場します.
ディレクトリが$GOPATH設定のパスにある場合、go.modファイルがあってもモジュールモードでは実行されません.
モジュールモードを使用するには、GO 111 MODULEという環境変数をONに設定します.
v1.13 ~
ディレクトリに移動します.modファイルがある場合は、デフォルトでモジュールモードで実行されます.
v1.17からGOPATHによる依存管理機能がなくなると言われていますが、まだあるようです.
でも確かに断られた.
GOPATH vs Go Module
複数のプロジェクトを$GOPATH単一パスとして管理すると、各プロジェクトの依存パッケージが混在し、管理が難しくなります.
Goモジュールでは、プロジェクトごとに依存性を管理できます.
Go Module
A module is a collection of Go packages stored in a file tree with a go.mod file at its root.
最上位ディレクトリに移動します.modファイルを作成すると、ファイルとサブパッケージを含むモジュールになります. go.modの位置はmodule rootです. Goモジュールのプロジェクトディレクトリは$GOPATH/srcの外にあり、go.modまたはgoが含まれます.modが存在するディレクトリのサブパスです. 外部モジュールのバージョンの管理
外部モジュールパスとバージョンgo.modファイルに書き込みます.外部モジュールを再構成する必要がある場合は、そのバージョンにモジュールをダウンロードします.goインジケータは省略し、goコマンドはgoです.modを更新できない場合はv 1です.11とします. goインジケータはv 1です.12から自動追加 go.modやgoはありませんmodにgoインジケータが省略されている場合、v 1.16と見なす. GOPATHモードで開発したgo.modは存在しない可能性があります. vendor/modules.txtはv 1です.17も行きますmodのgoバージョンは記録されません.
go mod init [path]
go.modを作成します.pathにアイテムのパッケージ名を入力します.
pathはgithubにアップロードしてモジュールとして使用する場合githubです.com/アカウント名/プロジェクト名の形式なので、最初からこの形式で書くことをお勧めします.
go get [path]
pathにパケットアドレスを入力して外部パケットをダウンロードします.この時に行きます.modを同時に書き込む.
go mod vendor
依存パッケージを$GOPATHパスからプロジェクトパスにコピーします.
go run -mod vendor main.go
コピーされたパッケージでは、ローカルベンダーパスのパッケージを使用できます.(Pythonのvenvのように)
go get動作方式
Goモジュールを無効にするimport pathを表示し、どのvcsを使用するかを決定します. vcsのモードに従ってパッケージをダウンロードします. github.comで始まるgithub.com管理とgit vcsを使用すると判断し、https://とgit+ssh://モード順にダウンロードしてみます. Goモジュール使用時https://proxy.golang.org(公式エージェントサーバ、設定に応じて変更可能)でミラーモジュールを検索します. ない場合は、直接検索します.(リポジトリに直接アクセス) モジュールが見つかった場合は、ダウンロードして移動します.sumに対してチェックサムを実行します. チェックサムhttps://sum.golang.org(正式チェックサムDBサーバでは設定により変更される場合があります)チェックサム値を取得します. go.sumを更新します. go.sumは、改ざんの有無を確認するために、各デジタルコピーのチェックサムを記録する. 最初にダウンロードされたモジュールと後にダウンロードされたモジュールが同じビットを持っているかどうかを確認し、様々な理由でプロジェクトに依存するモジュールが予期せぬ変形を起こさないようにします. バージョン管理時gomodとgo両方とも載せましょう
かんきょうへんすう GO111MODULE=[on | off | auto] Goモジュールを使用するかどうかを指定します. GOPROXY=[proxy server url] Moduleモードで外部モジュールをダウンロードする場合は、を参照してください. GOSUMDB=[sum db server url] Moduleモードでのチェックサムの場合は、を参照してください. GONOPROXY=[directory] エージェントの使用から除外するパスのリスト. GONOSUMDB=[directory] チェックサムから除外するパスのリスト. GOPRIVATE=[directory] エージェントとチェックサムから除外するパスのリスト. 参考資料 https://velog.io/@you1367/Go-Path-vs-Go-Module https://www.popit.kr/%EA%B3%A0-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B5%AC%EC%84%B1-%EB%B0%A9%EB%B2%95-%EA%B0%9C%EC%84%A0%ED%95%98%EA%B8%B0/ https://mingrammer.com/go-modules-private-repo/ https://johngrib.github.io/wiki/commit-go-mod-go-sum/
~ v1.10
GOPATH内でのみ管理されます.
$GOPATH/srcサブディレクトリでのみプロジェクトを作成できます.
依存性の解決方法
Goモジュールはオプション機能として登場します.
ディレクトリが$GOPATH設定のパスにある場合、go.modファイルがあってもモジュールモードでは実行されません.
モジュールモードを使用するには、GO 111 MODULEという環境変数をONに設定します.
v1.13 ~
ディレクトリに移動します.modファイルがある場合は、デフォルトでモジュールモードで実行されます.
v1.17からGOPATHによる依存管理機能がなくなると言われていますが、まだあるようです.
でも確かに断られた.
GOPATH vs Go Module
複数のプロジェクトを$GOPATH単一パスとして管理すると、各プロジェクトの依存パッケージが混在し、管理が難しくなります.
Goモジュールでは、プロジェクトごとに依存性を管理できます.
Go Module
A module is a collection of Go packages stored in a file tree with a go.mod file at its root.
最上位ディレクトリに移動します.modファイルを作成すると、ファイルとサブパッケージを含むモジュールになります.
外部モジュールパスとバージョンgo.modファイルに書き込みます.外部モジュールを再構成する必要がある場合は、そのバージョンにモジュールをダウンロードします.
module sample
go 1.13
require (
github.com/aliyun/aliyun-oss-go-sdk v2.0.5+incompatible
github.com/artdarek/go-unzip v0.0.0-20180315101617-33dc05190e4b
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
github.com/extrame/ole2 v0.0.0-20160812065207-d69429661ad7 // indirect
github.com/go-sql-driver/mysql v1.5.0
github.com/go-xorm/xorm v0.7.9
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/labstack/echo v3.3.10+incompatible
github.com/pangpanglabs/echoswagger v1.1.0
github.com/pangpanglabs/goutils v0.0.0-20200116103626-3f9fcfaa29b0
github.com/sergeilem/xls v0.0.1
github.com/tealeg/xlsx v1.0.5
github.com/urfave/cli v1.22.2
golang.org/x/image v0.0.0-20200119044424-58c23975cae1
)
命令語go mod init [path]
go.modを作成します.pathにアイテムのパッケージ名を入力します.
pathはgithubにアップロードしてモジュールとして使用する場合githubです.com/アカウント名/プロジェクト名の形式なので、最初からこの形式で書くことをお勧めします.
go get [path]
pathにパケットアドレスを入力して外部パケットをダウンロードします.この時に行きます.modを同時に書き込む.
go mod vendor
依存パッケージを$GOPATHパスからプロジェクトパスにコピーします.
go run -mod vendor main.go
コピーされたパッケージでは、ローカルベンダーパスのパッケージを使用できます.(Pythonのvenvのように)
go get動作方式
Goモジュールを無効にする
かんきょうへんすう
Reference
この問題について(Goの依存性の管理), 我々は、より多くの情報をここで見つけました https://velog.io/@ymlee3218/Go의-의존성-관리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol