安裝完golang后,輸入go env可以看到
GOPATH="/home/zhongzhanhui/go"
GOROOT="/usr/local/go"
GOBIN=""
1.go get
參考http://c.biancheng.net/view/123.html
go get
命令可以借助代碼管理工具通過遠程拉取或更新代碼包及其依賴包,並自動完成編譯和安裝。整個過程就像安裝一個 App 一樣簡單。這個命令在內部實際上分成了兩步操作:第一步是下載源碼包,第二步是執行 go install。
默認情況下,go get 可以直接使用。例如,想獲取 go 的源碼並編譯,使用下面的命令行即可:
go get github.com/davyxu/cellnet
go get下載的依賴包會放到GOPATH 目錄下,因此獲取前需要確保 GOPATH 已經設置。Go 1.8 版本之后,GOPATH 默認在用戶目錄的 go 文件夾下。
總結:
-
GO111MODULE="auto" | "off"
下載的包會安裝在GOPATH/src
下,import導入非標准包的時候也會從這個目錄搜索。 -
GO111MODULE="on"
下載的包會安裝在GOPATH/pkg/mod/
下,import導入非標准包的時候是從這個目錄搜索,不會去GOPATH/src
目錄下找包。
2.go module
參考https://www.cnblogs.com/chnmig/p/11806609.html
https://www.jianshu.com/p/bbed916d16ea
https://www.cnblogs.com/klsw/p/11537850.html
這個很詳細:goproxy和go modules的初步使用
go module是go官方自帶的go依賴管理庫。go module可以將某個項目(文件夾)下的所有依賴整理成一個 go.mod 文件,里面寫入了依賴的版本等,使用go module之后我們可不需要關心GOPATH,也不用將代碼放置在src下了。
GO111MODULE=off: 不使用 modules 功能。
GO111MODULE=on: 使用 modules 功能,不會去 GOPATH 下面查找依賴包。
GO111MODULE=auto: Golang 自己檢測是不是使用 modules 功能。
推薦使用 Go 模塊時將 GO111MODULE 設置為 on而不是atuo,將以下語句添加進 ~/bashrc中,然后重開Terminal
vim ~/.bashrc
# 添加
export GO111MODULE=on
初始化
項目第一次使用 GO MODULE(項目中還沒有go.mod文件) ,cd進入項目文件夾,初始化 MODULE
cd /home/zhongzhanhui/GoProject/Seckill
go mod init Seckill #Seckill是項目名
此時項目根目錄會出現一個 go.mod 文件,此時的 go.mod 文件只標識了項目名和go的版本,這是正常的,因為只是初始化了。 go.mod 文件內容如下:
module SecKill
go 1.13
檢測依賴
go mod tidy
tidy會檢測該文件夾目錄下所有引入的依賴,寫入 go.mod 文件,寫入后會發現 go.mod 文件有所變動:
module SecKill
go 1.13
require (
github.com/gin-contrib/sessions v0.0.1
github.com/gin-gonic/gin v1.5.0
github.com/jinzhu/gorm v1.9.11
github.com/kr/pretty v0.1.0 // indirect
gopkg.in/yaml.v2 v2.2.2
)
此時依賴還是沒有下載的。
下載依賴
我們需要將依賴下載至本地,但不使用 go get
,而是使用以下命令
go mod download
然而如果你沒有設置 GOPROXY 為國內鏡像,這步百分百會卡死。
設置鏡像的語句(最好把他們寫進 ~/.bashrc 中,不然每次打開Terminal都要執行一次):
export GO111MODULE=on
export GOPROXY=https://goproxy.io
參考https://blog.csdn.net/mrtwenty/article/details/98451005
此時會將依賴全部下載至 GOPATH 下的pkg/mod文件夾中,比如此處會下載到/home/zhongzhanhui/go/pkg/mod中,同時會在項目根目錄下生成 go.sum 文件, 該文件是依賴的詳細依賴。但是我們開頭說了,我們的項目是沒有放到 GOPATH 下的,那么我們下載至 GOPATH 下是無用的,照樣找不到這些包
似乎項目是可以找到放在GOPATH 下的依賴包的。
導入依賴
go mod vendor
執行此命令,會將剛才下載至 GOPATH 下的依賴轉移至該項目根目錄下的 vendor(自動新建) 文件夾下,此時我們就可以使用這些依賴了。然而實際不導入也是完全ok的。導入了反而更麻煩。
在協作中使用 GOMODULE時要注意的是, 在項目管理中,如使用git,請將 vendor 文件夾放入白名單,不然項目中帶上包體積會很大。
git設置白名單方式為在git托管的項目根目錄新建 .gitignore 文件
設置忽略即可。但是 go.mod 和 go.sum 不要忽略,另一人clone項目后在本地進行依賴更新(同上方依賴更新)即可。
3.GOLAND設置開啟 GO MODULE
這部分看goproxy和go modules的初步使用 更詳細。
可能是因為 GO MODULE 功能還需完善,GOLAND默認是關閉該功能的,我們需要手動打開。proxy應該填https://goproxy.io
在GoLand的setting中設置好GOPATH,然后在代碼的import的依賴包處按 alt+enter ,同步依賴包即可,可以看到依賴包名會由紅色變綠色。
依賴更新
這里的更新不是指版本的更新,而是指引入新依賴,不使用 go get ,我怎么在項目中加新包呢?
直接項目中 import 這個包,之后更新依賴即可依賴更新請從檢測依賴部分一直執行即可,即
go mod tidy
go mod download
go mod vendor
GOMODULE常用命令
go mod init # 初始化go.mod
go mod tidy # 更新依賴文件
go mod download # 下載依賴文件
go mod vendor # 將依賴轉移至本地的vendor文件
go mod edit # 手動修改依賴文件
go mod graph # 打印依賴圖
go mod verify # 校驗依賴
原文鏈接:https://blog.csdn.net/weixin_41519463/article/details/103501485