Moonshine's Blog

日拱一卒无有尽,功不唐捐终入海

go-包管理

背景

每次打开IDE,都变红。如果超过3次,我想着是不是应该将事实弄明白呢。

image-20220121111115117

分析

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版本
image-20220121181545764
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 # 看这个就知道是重写了