对golang工作空间、GOROOT、GOPATH以及常见的go命令(go build、go install、go mod)进行说明,作为初学golang所需要掌握的基础知识
工作空间
golang的工作空间是存放代码的地方,它的目录结构遵循存放代码的一些规则和使得代码正确工作需要进行的一些配置,一般无需手动配置。
src:存放源码的位置pkg:源码被组织成包存放的位置bin:包含可执行的命令,一般是通过go install安装的命令
环境变量
GOROOT:这是安装go语言到指定位置时需要设置的环境变量,是安装go所在的位置。GOPATH:这是指定工作空间所在的位置。GOPROXY:对一些第三方包如果因为网络原因无法下载或下载较慢,可以使用该环境变量中设置的代理服务器进行下载,国内常用https://goproxy.cn
go build与go install
两者的作用似乎有所重叠,以我目前的理解来看,两者都会对某个指定目录下的go代码进行编译,而go install则会多一步将编译完成的文件安装在$GOPATH/bin目录下。
需要进行说明的是,在我开始学习golang时,我所参考的教程直接通过在某个目录下运行go build或者go install,在我跟着运行的时候则会报错:

这个是因为该教程所使用的go版本与我使用的不同导致的,现在的go新增了go module这一项功能,所以直接使用 go build就会出现以上的错误。可以选择在命令后面添加具体的.go文件或者配置go mod对与go mod将在下面进行说明。
go mod
go mod的特性实在1.11版本中提出的,在1.16版本中默认开启了这项功能,主要有两个功能:
- 使得不必要将当前的代码设置在$GOPATH/src目录下就能完成编译
- 使得golang对第三方的包管理更为合适
对第一个功能的解释:默认不打开
go mod功能时,所有的代码都需要在$GOPATH/src目录下才能完成编译与安装,而引入了go mod功能之后,只需要当前代码是某个存在go.mod的目录或者该目录下级目录,就可以进行编译。对第二个功能的解释:在
go mod出现之前,golang使用的包管理的逻辑是直接将包安装在$GOPATH/src目录下,这样不利用对多个包的版本的统一管理,还会导致第三方的包和自定义的包的混用,而vender出现之后,虽然勉强解决了这个问题,但是又存在着每写一份代码,都需要下载一套使用到的包的对应版本,增加了磁盘的占用量,降低了代码的利用率。而go mod则是将各个版本的包下载到指定目录,同时记录版本信息,方便了统一管理。对于
go mod更详细的解释可以参考文章最后的链接
具体使用
go mod init: 创建go.mod文件,该命令可以加上模块名作为参数:

该命令创建go.mod后会根据.go文件的内容自动生成合适的配置
go.mod的内容主要通过四项:
module指定包的名字,一般建议与所在目录名相同require创建时会自动添加一些内容,指定.go文件依赖的包replace对require中的依赖包进行替换exclude对require中的依赖包进行忽略
一般来说,在对应目录直接运行go mod init后就可以运行go build或者go install了,无法找到对应的包再根据需要修改go.mod文件即可,结果如下:

go mod tidy:完成go.mod文件的创建后,如果代码文件中依赖有所改变,可以运行该命令,更新go.mod文件,会添加缺少的包并去掉为试用的包
本文详细介绍了Go语言的工作空间配置,包括GOROOT、GOPATH等环境变量的作用与设置方法,并解释了gobuild、goinstall命令的使用场景。此外,还深入探讨了gomod的特性和使用技巧,帮助读者更好地理解和运用Go Modules进行项目管理和依赖管理。

被折叠的 条评论
为什么被折叠?



