參考網(wǎng)址
blog.csdn.net/qq_42533216…
安裝完golang后,輸入go env可以看到
GOPATH="/home/zhongzhanhui/go"
GOROOT="/usr/local/go"
GOBIN=""
一、go get
1/參考
http://c.biancheng.net/view/123.html
`go get`?命令可以借助代碼管理工具通過(guò)遠(yuǎn)程拉取或更新代碼包及其依賴(lài)包,并自動(dòng)完成編譯和安裝。
整個(gè)過(guò)程就像安裝一個(gè) App 一樣簡(jiǎn)單。
這個(gè)命令在內(nèi)部實(shí)際上分成了兩步作:第一步是下載源碼包,第二步是執(zhí)行 go install。
默認(rèn)情況下,go get 可以直接使用。例如,想獲取 go 的源碼并編譯,使用下面的命令行即可:
```
go get github.com/davyxu/cellnet
```
go get下載的依賴(lài)包會(huì)放到GOPATH 目錄下,因此獲取前需要確保 GOPATH 已經(jīng)設(shè)置。Go 1.8 版本之后,GOPATH 默認(rèn)在用戶(hù)目錄的 go 文件夾下。
2/總結(jié):
- GO111MODULE="auto" | "off"
下載的包會(huì)安裝在`GOPATH/src`下,import導(dǎo)入非標(biāo)準(zhǔn)包的時(shí)候也會(huì)從這個(gè)目錄搜索。
- GO111MODULE="on"
下載的包會(huì)安裝在`GOPATH/pkg/mod/`下,import導(dǎo)入非標(biāo)準(zhǔn)包的時(shí)候是從這個(gè)目錄搜索,不會(huì)去`GOPATH/src`目錄下找包。
二、go module
0/參考
https://www.cnblogs.com/chnmig/p/11806609.html
https://www.jianshu.com/p/bbed916d16ea
https://www.cnblogs.com/klsw/p/11537850.html
這個(gè)很詳細(xì):goproxy和go modules的初步使用
go module是go官方自帶的go依賴(lài)管理庫(kù)。
go module可以將某個(gè)項(xiàng)目(文件夾)下的所有依賴(lài)整理成一個(gè) go.mod 文件,里面寫(xiě)入了依賴(lài)的版本等,使用go module之后我們可不需要關(guān)心GOPATH,也不用將代碼放置在src下了。
```
GO111MODULE=off: 不使用 modules 功能。
GO111MODULE=on: 使用 modules 功能,不會(huì)去 GOPATH 下面查找依賴(lài)包。
GO111MODULE=auto: Golang 自己檢測(cè)是不是使用 modules 功能。
```
推薦使用 Go 模塊的時(shí)候, 把GO111MODULE 設(shè)置為 on而不是atuo,將以下語(yǔ)句添加進(jìn) ~/bashrc中,然后重開(kāi)Terminal
```
vim ~/.bashrc
# 添加
export GO111MODULE=on
```
1/初始化
項(xiàng)目第一次使用 GO MODULE(項(xiàng)目中還沒(méi)有g(shù)o.mod文件) ,cd進(jìn)入項(xiàng)目文件夾,初始化 MODULE
```
cd /home/zhongzhanhui/GoProject/Seckill
go mod init Seckill #Seckill是項(xiàng)目名
```
此時(shí)項(xiàng)目根目錄會(huì)出現(xiàn)一個(gè) go.mod 文件,
此時(shí)的 go.mod 文件只標(biāo)識(shí)了項(xiàng)目名和go的版本,
這是正常的,因?yàn)橹皇浅跏蓟恕?go.mod 文件內(nèi)容如下:
```
module SecKill
go 1.13
```
2/檢測(cè)依賴(lài)
go mod tidy
tidy會(huì)檢測(cè)該文件夾目錄下所有引入的依賴(lài), 寫(xiě)入 go.mod 文件,寫(xiě)入后會(huì)發(fā)現(xiàn) go.mod 文件有所變動(dòng):
```go
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
)
```
此時(shí)依賴(lài)還是沒(méi)有下載的。
3/下載依賴(lài)
我們需要將依賴(lài)下載至本地,但不使用?`go get`,而是使用以下命令
```
go mod download
```
然而如果你沒(méi)有設(shè)置 GOPROXY 為國(guó)內(nèi)鏡像,這步百分百會(huì)卡死。
設(shè)置鏡像的語(yǔ)句(最好把他們寫(xiě)進(jìn) ~/.bashrc 中,不然每次打開(kāi)Terminal都要執(zhí)行一次):
```
export GO111MODULE=on
export GOPROXY=https://goproxy.io
```
參考:https://blog.csdn.net/mrtwenty/article/details/98451005
此時(shí)會(huì)將依賴(lài)全部下載至 GOPATH 下的pkg/mod文件夾中,
比如此處會(huì)下載到/home/zhongzhanhui/go/pkg/mod中,同時(shí)會(huì)在項(xiàng)目根目錄下生成 go.sum 文件,
該文件是依賴(lài)的詳細(xì)依賴(lài)。但是我們開(kāi)頭說(shuō)了,我們的項(xiàng)目是沒(méi)有放到 GOPATH 下的,那么我們下載至 GOPATH 下是無(wú)用的,照樣找不到這些包
似乎項(xiàng)目是可以找到放在GOPATH 下的依賴(lài)包的。
4/導(dǎo)入依賴(lài)
```
go mod vendor
```
執(zhí)行此命令,會(huì)將剛才下載至 GOPATH 下的依賴(lài)轉(zhuǎn)移至該項(xiàng)目根目錄下的 vendor(自動(dòng)新建) 文件夾下,
此時(shí)我們就可以使用這些依賴(lài)了。然而實(shí)際不導(dǎo)入也是完全ok的。導(dǎo)入了反而更麻煩。
在協(xié)作中使用 GOMODULE時(shí)要注意的是, 在[項(xiàng)目管理](https://so.csdn.net/so/search?q=%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86&spm=1001.2101.3001.7020)中,如使用git,請(qǐng)將 vendor 文件夾放入白名單,不然項(xiàng)目中帶上包體積會(huì)很大。
git設(shè)置白名單方式為在git托管的項(xiàng)目根目錄新建 .[gitignore](https://so.csdn.net/so/search?q=gitignore&spm=1001.2101.3001.7020) 文件
設(shè)置忽略即可。但是 go.mod 和 go.sum 不要忽略,另一人clone項(xiàng)目后在本地進(jìn)行依賴(lài)更新(同上方依賴(lài)更新)即可。
三、GOLAND設(shè)置開(kāi)啟 GO MODULE
這部分看goproxy和go modules的初步使用 更詳細(xì)。
可能是因?yàn)?GO MODULE 功能還需完善,GOLAND默認(rèn)是關(guān)閉該功能的,我們需要手動(dòng)打開(kāi)。proxy應(yīng)該填https://goproxy.io

在GoLand的setting中設(shè)置好GOPATH,然后在代碼的import的依賴(lài)包處按 alt+enter ,同步依賴(lài)包即可,可以看到依賴(lài)包名會(huì)由紅色變綠色。
依賴(lài)更新
這里的更新不是指版本的更新,而是指引入新依賴(lài),不使用 go get ,我怎么在項(xiàng)目中加新包呢?
直接項(xiàng)目中 import 這個(gè)包,之后更新依賴(lài)即可依賴(lài)更新請(qǐng)從檢測(cè)依賴(lài)部分一直執(zhí)行即可,即
```
go mod tidy
go mod download
go mod vendor
```
GOMODULE常用命令
go mod init # 初始化go.mod
go mod tidy # 更新依賴(lài)文件
go mod download # 下載依賴(lài)文件
go mod vendor # 將依賴(lài)轉(zhuǎn)移至本地的vendor文件
go mod edit # 手動(dòng)修改依賴(lài)文件
go mod graph # 打印依賴(lài)圖
go mod verify # 校驗(yàn)依賴(lài)
|