GoPath 和 GoModule
什么是GoPath?
GoPath是Golang的工作空间,所有的Go文件,都需要放在GoPath下的src目录下才能够编译运行,所以我提议不要直接配置全局的GoPath目录,否则会非常难以管理所有的Golang项目。
在项目中使用第三方类库的时候,可以使用go get
命令从网下直接拉去第三方类库的包,而拉取下来的包就会直接下载到我们的GoPath目录下的src包下。
但这样就导致了一个问题,我们自己的Golang代码,和第三方的Golang文件混在了一起,这对于我们管理Golang项目的包显然是非常麻烦的,而且每个如果项目都需要「同样的依赖」,那么我们就会在不同的GoPath的src中下载大量重复的第三方依赖包,这同样会占用大量的磁盘空间。
我们给不同的项目设置不同的GoPath,优点非常明显:
便于管理项目,每个项目都是不同的GoPath,这对于我们管理多个Golang项目而言,能够非常清晰的处理项目结构。如果我们把所有项目都放在同一个GoPath的src包下,那么项目的结构就会变得非常混乱,难以管理。
但是当我们需要依赖第三方的包的时候,不同的项目设置不同的GoPath的缺点也非常明显:
- 第三方依赖的包和我们自己的Golang包混在一起,会给我们的项目文件管理带来一定的麻烦。
- 不同的GoPath都需要下载依赖,那么磁盘中重复的依赖就会非常多,会占用我们大量的磁盘空间。
所以,究竟是设置一个GoPath目录,解决依赖重复的问题,还是设置不同的GoPath目录,解决Golang项目结构混乱的问题,这是一个有争议性的问题。
为了解决这所有的问题,Golang最终引入了GoModule的概念。
什么是GoModule?
我们之前说过,所有的Golang的文件,都需要放在GoPath目录下才能进行正确的编译和运行,而有了GoModule之后,那么我们就可以把文件放在GoModule目录下,而放在GoModule目录下的Golang文件,也可以正确地编译运行。
- GoPath用来存放我们从网上拉取的第三方依赖包
- GoModule用来存放我们自己的Golang项目文件
现在GoModule和GoPath齐力合作,当我们自己的项目需要依赖第三方的包的时候,我们通过GoModule目录下的一个go.mod文件来引用GoPath目录src包下的第三方依赖即可。
怎么使用GoModule?
CMD创建
很简单,我们直接使用go mod init 模块名称
命令对目录进行初始化操作,即可将这个目录设置为GoModule目录。
我们在F:\GoModule
目录下创建一个文件夹,名字为:go_module
。
然后通过cmd命令提示符进入该目录,执行go mod init 模块名称
初始化命令
Golang创建
更简单了,都懒得写了,懂的都懂哈!
go.mod
当初始化命令执行完毕之后,会在go_module目录下生成一个go.mod文件,该文件就是用来引入GoPath目录下的第三方依赖的文件。
1 | module GolangLearning |
当我们需要引入GoPath目录下的第三方依赖包的时候,只需要在go.mod目录下添加依赖名称,GoModule就会自动帮我们把第三方依赖包下载到GoPath目录下。
例如下面的go.mod文件:
1 | module GolangLearning |
我们在这个go.mod文件中引入了两个依赖,分别是:beego框架 v1.12.1版本
和mysql驱动 v1.5.0版本
。