Go 语言的GOPATH与gomod,新手坑

Golang
395
0
0
2022-07-19

几个常用的环境变量

GOPATH: //go 的工作目录
GOROOT://go 的安装目录
GOBIN://go 的bin文件目录
GO111MODULE: //go mod 开关 on为开启go mod
GOPROXY=https://goproxy.cn,direct // https://goproxy.cn,direct 国内代理

因为国内墙的缘故,需要设置代理,这样在Vscode安装package时就不会失败。

go env -w GOPROXY https://goproxy.cn,direct

查看go的设置命令

go env

GOPATH

GOPATH是早期的设置方式,将工作目录设置GOPATH到全局环境变量。

不同的项目都在GOPATH/src/下。很显然这种设置方法是不太方便的,因为不同项目引用的package到放到了一起,这用git管理起来很麻烦,比如A项目引用了a,b两个package,B项目引用了c,d两个package,那么如果我在A中修改了package的内容,我提交A项目时想要带着package时就很麻烦。

其次是GOPATH需要设置全局环境变量,很多新手在对这些不熟悉的时候,很容易出错。项目名也必须不同。否则无法区分。

Go mod

go mod 正是为了解决上述问题(并不单单是上述问题,还有依赖引用问题)。在1.13以后开始推行。因为没多长时间,所以现在网络上的教程两种版本的都有,很容易混淆。

go mod可以完全替代GOPATH设置。只需要 go env -w GO111MODULE=on 开启go mod

GOPATH 与 Go mod 两种模式的项目启动是不相同的

go env -w GO111MODULE=off 时,在 GOPATH 的根目录就可以直接启动项目

Go 语言的GOPATH与gomod,新手坑

go env -w GO111MODULE=off 时,需指进入项目启动程序

调用第三方包的情况下,在当前目录,即使指定了文件路径,仍执行失败

Go 语言的GOPATH与gomod,新手坑

进入项目目录,启动成功

Go 语言的GOPATH与gomod,新手坑

没有引入第三方包,指定路径及启动成功

Go 语言的GOPATH与gomod,新手坑

吐槽一句,这种设计坑真多,小白痛不欲生。

还有就是在安装 gin 框架的时候执行 go get -u github.com/gin-gonic/gin 总是执行失败,不得不说,这次真是被 topgoer.com gin框架/简介 这文档给误导了,文档看上去挺全的,可偏偏没详细介绍 GOPATH 与 Go mod 的区别。

go get -u github.com/gin-gonic/gin 命令在 go mod 模式下完全没问题,但是在 GOPATH 模式下就不正常了。

GOPATH 与 Go mod 两种模式是不兼容的,建议使用 Go mod 模式就好。

更详细参考文档 studygolang.com/articles/28712