Go Modules
資料集
ページ
Go Modules Reference
module: a collectoin of packages
module: identified by a module path @ go.mod file
module root directory: go.mod location
package: compiled together
package path = module path + subdirectory
Module Paths
modulepath = repository root path + directory + major version suffix
directory: serves as a prefix for semantic version tag
Versions
an immutable snapshot of a module
Go Moduleを作る
moduleはGoがコードを実行するコンテキストを特定する
そのコードを走らせるべきGoのバージョン
そのモジュールが要求する他のモジュール
go mod init [module-path] で新しいgo.modを作成することでgo moduleを初期化する
引数を与えない時、import commentsやversion control configからimport-pathを推測する
他のモジュールからコードを呼び出す
使用する側のモジュールをgo mod initで初期化する
依存したいモジュールをgo get import-pathで宣言する。こうするとgo.modが更新される
ダウンロードも行われている→Q. どこに?
go help getでヘルプが見られる
エラーハンドリングを追加する-依存されるモジュールの更新
依存されるモジュールを更新してpushする
go get module-path@<commit-hash> で更新する
インタフェースが変わっているのでコンパイルできない
replace directiveを使う
greetingsモジュールを更新する
リモートリポジトリにあるモジュールの代わりにローカルのpathで置き換えるようにすることができる
go mod edit -replace gopher.live/u8c84c5b19a02/greetings=/home/gopher/greetings
$ cat go.mod
module gopher.live/u8c84c5b19a02/hello
go 1.15
require gopher.live/u8c84c5b19a02/greetings v0.0.0-20210302041901-f838668a0c88
replace gopher.live/u8c84c5b19a02/greetings => /home/gopher/greetings
テストを追加する
コンパイルとインストール
go list go list -f '{{.Target}}' を使うと、goコマンドが現在のパッケージをインストールするであろう場所がわかる 用語集