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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM