这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
go语言学习遇到的问题
最近在努力学习go,这个编程语言语法和写法的都和其他的编程语言有着比较大的差异。所以特地记录一下学习go遇到的问题。
GOPATH和go module
这个问题比较神奇,也是我学习这个编程语言中遇到的比较拧巴的问题。网上的绝大多数的教程都会让你配置GOPATH,然后go程序都必须在GOPATH的SRC这个文件下运行,而这个GOPATH是你windows的环境变量。
在以前GOPATH下会对go程序的编写严格进行,必须在src下,并且在很多包,或者git下其他的程序之后,整个项目就会变得非常混乱。
这样听起来很奇怪不是吗?身为一个比较新鲜的编程语言,既然会有这么愚蠢的方法。
而网上的教程绝大多数度是让你去配置环境,最后用vscode去编写go程序,但是我自己在用IDEA去写的时候却不会遇到要配置GOPATH这个问题,这是为什么呢?然后我去网上进行了一番搜索之后,了解了一个新鲜的事物,叫做go module。
而go 1.13版本之后就支持了go module,这使得程序的编写不用在指定的文件夹进行,而是用模块化的方式去编写程序。
而现在,在有了MODULE之后,GOPATH现在常用于存放第三方API,不进行程序编写了。go module允许go在任意地方进行编写,非常人性化。
当你在GOPATH下使用go module时 用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。
-
GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
-
GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
-
GO111MODULE=auto 在 $GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。
但是我建议新开别的文件夹去写go程序,不要在GoPATH下
所以,我们应该使用 go mod init your_project_name
去实现go的模块化编写