1. 程式人生 > 其它 >golang 通過go get | go mod download下載安裝包

golang 通過go get | go mod download下載安裝包

安裝完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