原创

GoModule的真实使用场景

GoModule使用场景1:
今天,小明要接手一个新的Go项目,他通过GoLand中的git工具,从公司的git仓库中下载了一个Go的项目。(下载到他电脑的非${GOPATH}/src目录,比如下载到他电脑的任意一个自己的工作空间)

此时他要做的是:
1). 先打开项目根目录下的go.mod文件看看里面依赖了什么工具包。(这个就是随便了解一下项目)
2). Go的中央模块仓库是Go的官网提供的,在国外是https://proxy.golang.org这个地址,可是在国内无法访问。

我们在国内需要使用如下的中央模块仓库地址:https://goproxy.cn
我们Go中的SDK默认是去找国外的中央模块仓库的,如何修改成国内的呢?
我们知道,所有的下载拉取行为脚本实际上是从 go download 这个脚本代码中实现的,而在这个脚本中的源码实现里,肯定有一个代码是写的是取出操作系统中的一个环境变量,这个环境变量存储着一个地址,这个地址代表了去哪个中央模块仓库拉取。
在GoSDK中的默认实现里,这个操作系统的环境变量叫做GOPROXY,在脚本中为其赋予了一个默认值,就是国外的proxy.golang.org这个值。
我们要想修改,只需要在当前电脑修改该环境变量的值即可:
(注意,这个变量值不带https,这只是一个变量,程序会自动拼接https)

在windows环境
set GOPROXY=goproxy.cn

在linux环境
export GOPROXY=goproxy.cn

3). 切换到项目的根目录,也就是有go.mod的那层目录,打开命令行窗口。
执行 download指令(下载模块项目到${GOPATH}/pkg/mod下)
go mod download

4).如果不报错,代表已经下载好了,可以使用了,此时在项目根目录会生成一个go.sum文件。

5).此时可以进行开发了。

GoModule使用场景2:

场景2:我们如何用命令创建一个Module的项目,(开发工具也能手动创建)。

切换到项目根目录,执行如下指令:
go mod init 模块名(模块名可不写)
然后会在根目录下生成一个go.mod文件

我们看看这个go.mod文件长啥样?

// 刚才init指令后的模块名参数被写在module后了
module 模块名
//表示使用GoSDK的哪个版本
go 1.14

修改go.mod文件中的依赖即可。

我们有两种方式下载和更新依赖:
1.修改go.mod文件,然后执行go mod down 把模块依赖下载到自己${GOPATH}/pkg/mod下,这里面装的是所有下载的module缓存依赖文件,其中有zip的包,也有源码,在一个项目文件夹下的不同文件夹下放着,还有版本号文件夹区分,每个版本都是一个文件夹。
2.直接在命令行使用go get package@version 更新或者下载依赖模块,升级或者降级模块的版本。(这里是开启模块后的go get指令用法)

例如:
go get github.com/gin-contrib/sessions@v0.0.1

这个指令执行过后,会自动修改go.mod中的文件内容,不需要我们手动修改go.mod文件中的内容。

本文链接地址:http://www.ysxbohui.com/article/229

正文到此结束