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