使用go mod自引用的情况:
- 不使用go mod init module_name的话,项目需要位于$GOPATH/src路径之下,此时build的话,go.mod文件中的module名是相对$GOPATH/src的相对路径,eg. 项目为$GOPATH/src/github.com/mirror,则module名为github.com/mirror。那么此时,在代码里自引用就需要import github.com/mirror/xxxx,若项目为$GOPATH/src/mirror,则此时module名为mirror,自引用格式为import mirror/xxx。注意,这是个很大的局限,当项目没有位于$GOPATH/src之下的话,直接go build会报错
- 使用go mod init module_name,此时module名就是module_name,此时项目在任何地方都可以,代码中自引用格式为import module_name/xxx即可
- 如果项目中本身就有一个go.mod文件,这就相当于已经确定好了本项目应该导入的名字,在go build的时候遇到项目里是以module_name/xxx导入的不会尝试去拉取代码。
- 总之,代码里自引用的时候使用import github.com/sre/mirror/xxx也好,直接用import mirror/xxx也好,都是可以的,只是项目必须有确定好的go.mod,在go.mod中定义好module_name,那么只要代码中import的是这个完整的module_name即可正常运行。此时项目不需要放在$GOPATH/src之下,任一路径均可