go mod 机制到底如何运作的

1.go mod 允许在$GOPATH路径外 建立文件夹 go mod init 模块名称 譬如 github.com/walkmiao/testgomod
那么将会在此目录下生成go.mod文件。随后如果添加一个文件并写入代码提交到远程仓库。
第一个问题想问的是 这里的模块名称远程仓库名称是否必须要一致?这里我不知道这个模块名称有什么用。

2.然后我又新建一个mod管理项目usergomod,使用之前的testgomod下的包。在我测试完后,我删除了本地 $GOPATH/pkg/mod下的所有东西 并且也删除了远程仓库。为什么在usegomod目录下go build依然能够拉取之前的mod。真是百思不得其解

回答:

1) module name 是你在程序中引用一个 module 用的名字。import 的时候是可以改的。 path 是告诉程序去哪里找到这个 module 。两者并不一定一致,但是通常推荐一致。

2) pkg/mod 是你的依赖。go build 甚至并不需要你自己的 module 在 git 控制下。但是依赖的话,会顺着 import 的路径去远程仓库拉取,然后放在 pkg/mod 里。

其实也可以为依赖指定本地路径,这样就不去远程仓库拉了。详见 When should I use the replace directive?

回答:

2)为什么删除远程仓库和本地$GOPATH/pkg/mod后 重新go build依然可以拉取模块
我想从这个图中可以看到GOPROXY在向远程仓库拉取的时候 自己也保留了一份cache,那么之后的拉取如果GOPROXY上有的话 就会直接从GOPROXY返回给使用者。
防止由于项目依赖某作者的模块,但是模块被作者删除而被Break掉的情况

图片描述

以上是 go mod 机制到底如何运作的 的全部内容, 来源链接: utcz.com/p/182037.html

回到顶部