背景
每次打开IDE,都变红。如果超过3次,我想着是不是应该将事实弄明白呢。
分析
1、为啥会报错?
肯定是找不到对应的pkg
2、那IDE到底是去哪里找了呢?
理论上是gopath路径下面,👇🏻GOPATH=”/root/gopath” 这里,IDE里面可以设置的项目更多
go env的输出
1 2 3 4 5
| GO111MODULE="on" GOPATH="/root/gopath" GOPROXY="https://goproxy.cn,direct" # 设置代理,go get的时候快点 GOROOT="/usr/local/go" # go二进制包的安装地址 GOVERSION="go1.17" # go版本
|
3、实际上GOPATH下面是有需要的pkg的
1 2 3 4 5 6 7 8 9 10
| # 需要的包 -> % 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那样,各个项目自己管理自己的包。
1 2
| go mod vendor # 创建vendor依赖 go mod tidy
|
IDE打开go modules的选项,问题自然就解决了
5、Mac上go多版本怎么管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 先确认是不是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
|