小白爱上了Go之Go的基础配置问题
在阅读了《The way to go》和《Go 语言实战》两本 Go 语言学习的入门书籍后,小白觉得自己的Go语言基础知识已经足够开始上手应用开发了。
于是小白找到了一本《Go Web 编程》,在阅读这本书的过程中,自己动手开发Go Web应用,并希望在阅读完之后,能够开发出一个功能丰富,性能优异的Web应用。
小白很开心终于可以上手写Go Web应用了,在编写了一个小的服务器Demo后,小白发现对于Go 环境变量GoPath、GoRoot还是糊里糊涂的。
直接使用Go install 去编译程序时,如果文件放到Go安装路径下的src文件,会直接在同级目录bin下边生成相应的 exe 文件。但是为什么会这样呢?
而且在 Go 1.22.5 版本,GoPath和GoRoot同路径会提示警告:
warning: GOPATH set to GOROOT has no effect //这是由于GOPATH和GOROOT同路径导致的
但把环境变量GOPATH设置为自己定义的项目路径如:D:/goproject ,并在路径下边新建src、pkg、bin文件,把项目文件放到src路径下,设置的GOPATH又会不生效,提示错误:
go: 'go install' requires a version when current directory is not in a module Try 'go install first_webapp@latest' to install the latest version
这里小白有几点不明白的地方
1.是不是一定要手动建src、pkg、bin文件
2.环境变量是设置用户变量还是系统变量,设置完后需不需要重启
3.为什么windows环境下,设置的GOPATH环境变量无效
4.为什么使用Go mod,什么是Go mod
首先第一点:
Go在执行go install 命令时,会自动扫描GOPATH环境变量指定目录下的src文件,所以src文件是必须要创建的。
bin 文件并不必须要创建,在执行go install 成功后会自动创建bin文件夹,并将生成的exe文件放置到里面。
pkg文件用来存放编译后生成的归档文件例如(go module),也并不是必须创建的,可以自动生成。
第二点:
环境变量设置用户变量或者系统变量都可以,但是如果都设置的话,用户变量会覆盖系统变量。
设置完成后,重启cmd命令提示符或者vscode即可,不需要重启电脑。
另外,在设置环境变量的时候,需要指定全路径的方式。比如在使用 %GOROOT%/bin 设置系统变量Path不生效。
第三点:
经过验证,跟GOPATH设置无关,如果放到Go安装目录的src文件下,直接执行go install 就会自动在Go安装目录的bin文件夹下生成exe文件。
而如果不在Go安装目录下边,需要在项目目录先执行go mod init初始化mod后,
再执行 go install xxx 即会再项目目录src同级的bin文件中生成exe文件。其中 xxx 为module name
经回翻《Go 语言实战》GOPATH的主要用途如下:
在import导入包时,编译器会使用Go环境变量设置的路径,通过引入的相对路径来查找磁盘上的包。
标准库中的包会在安装 Go 的位置找到。
Go 开发者创建的包会在 GOPATH 环境变量指定的目录里查找。GOPATH指定的目录就是开发者的个人工作空间。
编译器会先查找 Go 的安装目录,然后才会按顺序找 GOPATH 变量里列出的目录。
第四点:
什么是Go mod
Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
为什么用Go mod
猜测在引入Go mod 之后,在创建项目时,生成mod文件已经是 go 程序必须的执行步骤,以便更好的管理依赖包的问题
经过以上四个问题,小白对Go的环境变量有了更好的理解。虽然还有没完全弄明白的地方,但在之后 Go 编程的路上,小白一定会越来越强。对于现在没有弄明白的问题,也许等小白足够强之后。
再看现在的问题,或许那些不明白的地方已经迎刃而解了。