title: go-包管理
tags:
- go
- 包管理
背景
每次打开IDE,都变红。如果超过3次,我想着是不是应该将事实弄明白呢。
分析
1、为啥会报错?
肯定是找不到对应的pkg
2、那IDE到底是去哪里找了呢?
理论上是gopath路径下面,👇🏻GOPATH="/root/gopath" 这里,IDE里面可以设置的项目更多
go env的输出
GO111MODULE="on"
GOPATH="/root/gopath"
GOPROXY="https://goproxy.cn,direct" # 设置代理,go get的时候快点
GOROOT="/usr/local/go" # go二进制包的安装地址
GOVERSION="go1.17" # go版本
3、实际上GOPATH下面是有需要的pkg的
# 需要的包
-> % ll /Users/linmi/go/pkg/mod/github.com/prometheus
total 0
dr-xr-xr-x 23 linmi staff 736B 1 21 12:01 client_golang@v1.12.0
dr-xr-xr-x 13 linmi staff 416B 1 21 12:01 client_model@v0.2.0
dr-xr-xr-x 24 linmi staff 768B 1 21 12:01 common@v0.32.1
dr-xr-xr-x 122 linmi staff 3.8K 1 21 12:01 procfs@v0.7.3
# IDE报错的路径
/Users/linmi/go/pkg/mod/src/github.com/prometheus/client_golang/prometheus/promhttp (from $GOPATH)
📢:IDE报错的路径里面多了一层src
目录,这就有点出乎意料了。
4、最佳实践
gopath和go mod是互斥的,现在的话肯定是go mod了。最简单&有效的方法,类似python那样,各个项目自己管理自己的包。
go mod vendor # 创建vendor依赖
go mod tidy
IDE打开go modules的选项,问题自然就解决了
5、Mac上go多版本怎么管理
# 先确认是不是brew管理
-> % which go
/usr/local/bin/go
-> % ll -h /usr/local/bin/go
lrwxr-xr-x 1 linmi admin 26B 10 12 23:34 /usr/local/bin/go -> ../Cellar/go/1.17.2/bin/go # Cellar这里就能说明是的
# 接着看看有哪些版本,我的本机有3个版本
ll /usr/local/opt | grep go # opt=options查看可选择的版本
lrwxr-xr-x 1 linmi admin 19B 10 12 23:34 go -> ../Cellar/go/1.17.2
lrwxr-xr-x 1 linmi admin 25B 10 13 10:54 go@1.15 -> ../Cellar/go@1.15/1.15.15
lrwxr-xr-x 1 linmi admin 24B 9 23 11:27 go@1.16 -> ../Cellar/go@1.16/1.16.8
lrwxr-xr-x 1 linmi admin 19B 10 12 23:34 go@1.17 -> ../Cellar/go/1.17.2
lrwxr-xr-x 1 linmi admin 19B 10 12 23:34 golang -> ../Cellar/go/1.17.2
lrwxr-xr-x 1 linmi admin 19B 10 12 23:34 google-go -> ../Cellar/go/1.17.2
# 那要怎么使用brew快捷的进行设置呢
-> % brew link go
Warning: Already linked: /usr/local/Cellar/go/1.17.2
To relink, run:
brew unlink go && brew link go # 重新回到最近的版本
->% brew link --overwrite go@1.16 # 看这个就知道是重写了