一、關於go modules
- 1.1 go modules 是go1.11 新加的特性
現在已有go 1.13.4 了本人用了就是最新版的
- 1.2關於modules 官方定義
模塊是相關Go包的集合。modules是源代碼交換和版本控制的單元。 go命令直接支持使用modules,包括記錄和解析對其他模塊的依賴性。modules替換舊的基於GOPATH的方法來指定在給定構建中使用哪些源文件。
- 1.3 使用modules 的配置
- 配置GO111MODULE
GO111MODULE 有三個值 off , on,auto
- 配置GO111MODULE
GO111MODULE=off,go命令行將不會支持module功能,尋找依賴包的方式將會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找。
GO111MODULE=on,go命令行會使用modules,而一點也不會去GOPATH/src目錄下查找。 (pkg 包都存放在 $GOPATH/pkg 下)
GO111MODULE=auto,默認值,go命令行將會根據當前目錄來決定是否啟用module功能。(pkg 包都存放在 $GOPATH/pkg 下)
- 1.4 本人配置
export GO111MODULE=auto
因為以前沒有使用 ,未來兼容以前的項目,暫設成auto
二、go mod 的一些命令
命令 | 說明 |
---|---|
download | download modules to local cache(下載依賴包 重要) |
edit | edit go.mod from tools or scripts(編輯go.mod |
graph | print module requirement graph (打印模塊依賴圖) |
init | initialize new module in current directory(在當前目錄初始化mod 重要) |
tidy | add missing and remove unused modules(拉取缺少的模塊,移除不用的模塊 重要) |
vendor | make vendored copy of dependencies(將依賴復制到vendor下) |
verify | verify dependencies have expected content (驗證依賴是否正確) |
why | explain why packages or modules are needed(解釋為什么需要依賴) |
三、如何使用 go mod
- 3.1 簡單使用
mkdir hello
cd hello
go mod init hello
# 此時會出現一個hello下會出現一個 go.mod 目錄
# 需要下載 所有第三方包時 go mod download
# 下載第三包可以直接使用 go get need_pkg
# 下載好的依賴 和 版本 會加入到 go.mod 里面,
# 下載好的第三包 會放在到$GOPATH/pkg/mod 中
# 沒有設置GOPATH的話 下載好的第三方包會放在~/go/pkg/mod
# 如果你想放在當前目前可以執行如下命令
go mod vendor
# 此時你的包就會出現在vendor下了,意思是將依賴包放在vendor中
- 3.2 關於依賴升級
go list -m -u all 來檢查可以升級的package
go get -u 升級所有依賴
go get -u need-pack 升級指定的依賴
- 3.3 關於依賴打包
go build -ldflags="-s -w" -o app ./main.go
# -ldflags="-s -w" 壓縮程序
- 3.4 github 拉取 他人含有go.mod的項目時,下載所有第三方包
go mod download
- 3.5 關於如何使用自定義包
hello
|--conf
|-conf.go
|-main.go
|-go.mod
如何導入conf 包呢?
先查看go.mod 中的module 后的定義的module_name
在導入時 直接使用module_name/conf 即可
四、goland的配置
goland 升級到最新的,舊的goland 版本時不支持go mod,
在preferences -> go -> Go Modules(vgo)
給Enable Go Modules (vgo) Integration 打勾勾就行
上圖的那個圈起來的地方一定要勾上,
Enable Go Modules(vgo) 啟用modules 模式
verdoring mode 會使用vendor 文件夾中的包(不用打勾,打勾意味着依賴包都使用vendor 目錄里面的.)