跳到主要内容

go_module

module是一个相关Go包的集合,它是源代码更替和版本控制的单元。

2.1、Go mod命令

/*

download download modules to local cache (下载依赖的module到本地cache))

edit edit go.mod from tools or scripts (编辑go.mod文件)

graph print module requirement graph (打印模块依赖图))

init initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))

tidy add missing and remove unused modules (增加丢失的module,去掉未用的module)

vendor make vendored copy of dependencies (将依赖复制到vendor下)

verify verify dependencies have expected content (校验依赖)

why explain why packages or modules are needed (解释为什么需要依赖)*/
提示

Mod Cache 路径默认在$GOPATH/pkg 下面:$GOPATH/pkg/mod

2.2、go mod流程

同样是mysite项目,现在从src中剪切到其它任何位置,会编译报错。用go module来解决这个问题。

(1) 首先将你的版本更新到最新的Go版本(>=1.11)

(2)通过go命令行,进入到你当前的工程目录下,在命令行设置临时环境变量go env -w GO111MODULE=off

(3)go mod init在当前目录下生成一个go.mod文件,执行这条命令时,当前目录不能存在go.mod文件(有删除)。

go mod init xxx  // xxx即声明的模块名

该命令会在当前目录下生成go.mod文件,文件中声明了模块名称。

module xxx
go 1.16

以后相关依赖可以声明在这里,就像python的requirements

提示

此时运行程序,会将相关的依赖直接下载到GOPATH/pkg/mod路径下。

(4)执行go mod tidy命令,它会添加缺失的模块以及移除不需要的模块

执行后会生成go.sum文件(模块下载条目)。添加参数-v,例如go mod tidy -v可以将执行的信息,即删除和添加的包打印到命令行;

将拉取的依赖存放到GOPATH/pkg/mod路径下。

(5)执行命令go mod verify来检查当前模块的依赖是否全部下载下来,是否下载下来被修改过。如果所有的模块都没有被修改过,那么执行这条命令之后,会打印all modules verified

(6)执行命令go mod vendor生成vendor文件夹,用来区分某些库的不同版本。该文件夹下将会放置你go.mod文件描述的依赖包,文件夹下同时还有一个文件modules.txt,它是你整个工程的所有模块。在执行这条命令之前,如果你工程之前有vendor目录,应该先进行删除。同理go mod vendor -v会将添加到vendor中的模块打印出来;

image-20220917233933903

image-20220918001221237

提示

内部包调用从初始化模块名go.mod所在的目录开始查找,所以导入api包:import "xxx/api"