Go 语言的GOPATH与gomod,新手坑

几个常用的环境变量

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 6
Summer

历史遗留原因,没办法。

新项目使用 go mod init ,GO111MODULE 设置为 auto,是现在比较合适的工作方式。

2年前 评论
木大大 (楼主) 2年前
frans 2年前

都开始转golang了,厉害了哦

2年前 评论
木大大 (楼主) 2年前
huangxu (作者) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!