環境
- go version go1.12.9 darwin/amd64
- 官方教學 : https://github.com/golang/go/wiki/Modules#quick-start
啟用方式
- 支援 GO 1.11 以後版本
- 確認版本
go version
,檢查環境變數 :go env
- 確認版本
- 調用方式有兩種
- 在 GOPATH 外,確定 GO111MODULE 沒有設定或者設定為 auto,並在專案中建立 go.mod
- 在 GOPAHT 中,設定
export GO111MODULE=on
,就可直接在 GOPATH 中使用
使用
可參考快速使用 https://github.com/golang/go/wiki/Modules#quick-start
1. 建立 repo
1 |
|
2. 初始化 go module
1 |
|
- {github.com/my/repo} : 只是一個對應的名稱
3. 設定 main.go
1 |
|
4. 建立 hello 執行檔
1 |
|
go build|test|install
: 都會下載 pkg 到$GOPATH/pkg/mod
目錄下- 使用
go mod download
- 使用
- 因為並沒有明確設定 go.mod 中
rsc.io/quote
的版本,會自動下載最新版本,可以去 go.mod 中檢查變動 - 可以注意到並沒有用
go get
的指令 - 當想要變更版本,可以使用
go get foo@v1.2.3
,go get foo@master
,go get foo@e3702bed2
, 或者直接編輯go.mod
然後執行下載.
一個標準的 go.mod
1 |
|
- 下載的 go pkg 都會放在
GOPATH/pkg/mod/...
路徑中 - gomod 不會在
$GOPATH/src
目錄下保存 pkg 包的源碼,而是包源碼和鏈接庫保存在$GOPATH/pkg/mod
目錄下。
一些會用到的相關指令
https://github.com/golang/go/wiki/Modules#daily-workflow
go list -m all
- 查看所有目前 build 後有使用的相依版本(direct and indirect 都會列出)
go list -u -m all
- 對所有的 direct 與 indirect 相依,查看有效的最小版本與補丁升級。(details)
go list -u -m -json all
- 用 json 格式顯示詳細資料
go get -u
orgo get -u=patch
- 更新所有相依到最新的版本號或者補丁升級(pre-releases 會被忽略)
go build ./...
orgo test ./...
- 在根目錄執行 build 與 test 會下載 module
go mod tidy
- 從 go.mod 中,新增或移除沒用的 modules
go mod vendor
- 若你有在使用 vendor, 可使用此指令, 將 modules 複製到 vendor 目錄下
其他
- go list 只是把 cache 更新, 要用 go mod download 才會下載
go mod edit -fmt
: 重新格式化 go.mod 的格式, ex : 如果版本不是 3 位數,會補齊- 清除下載的 pkg & cache :
go clean -i -x -modcache
go.mod 與 go.sum
- 確保 go.sum 與 go.mod 一起遞交到 git 中
- For validation purposes, go.sum contains the expected cryptographic checksums of the content of specific module versions.
- go.sum 是為了驗證目的,go.sum 包含所有指定版本的 cryptographic checksums
- 此外,go.sum 紀錄的 checksums 包含所有 direct 與 indriect 的相依庫,曾經建立過的。因此 go.sum 算是一種歷史紀錄。