Terry-Mao / goim

goim
https://goim.io/
MIT License
7.17k stars 1.78k forks source link

关于内部包引用的地址问题 #311

Open objcoding opened 5 years ago

objcoding commented 5 years ago

如图: image 我没想明白为什么内部包之间的引用,要加入github路径? 这种情况下,如果我直接实用git clone将源码下载到gopath的src源码目录中,这种情况下就会出现内部包引用不了的情况。

QuintinZhangQQ commented 5 years ago

了解下 go mod

objcoding commented 5 years ago

@HelloWorldZQ 这是我很久之前总结的文章:https://objcoding.com/2018/09/13/go-modules/ 由于很久没用go了,不知道现在的 go modules更改了哪些特性。 我是有个疑问,我用mac的时候,即使我go mod tidy了,但是依然显示依赖不了,现在确实有这个问题。也在gopath中,可能我操作不当,我将依赖全部删除,重新tidy一遍看看。 在go mod文件中,module github.com/objcoding/testmod,意味着别人依赖你的项目就可requre,包括内部依赖也可以,也许是因为现在go mod更成熟了吧。

QuintinZhangQQ commented 5 years ago

我用goland 要在设置 image

objcoding commented 5 years ago

还有,如果将github地址也同时引用进来,是不是可以理解成,这个包是从远程拉到本地的,并不是在内部项目依赖,这样一来,你依赖的包即使本地更改代码了,也必须同时提交到github,内部引用了该依赖的项目才能更新到最新的版本。

objcoding commented 5 years ago

你说的这个是goproxy,这个我知道,其实这个配置环境变量了就不用在goland配置了

QuintinZhangQQ commented 5 years ago

image 你依赖的包都在 gopath 的pkg/mod 下面

objcoding commented 5 years ago

大佬方便加个微信吗?想跟你交朋友

objcoding commented 5 years ago

我大概知道什么原因了,原因是因为,在go mod 文件中,指定了当前modules(module github.com/Terry-Mao/goim),相当于定义了一层该模块的引用地址,这个引用地址需要跟远程仓库对应,以便于别人可以用这个地址引用你的依赖包,同理,在本地引用项目内部依赖包,依然可以用这个地址引用,而不需要用项目的相对路径,这个有点绕 image

objcoding commented 5 years ago

我刚刚试了改成 module goim,然后用go mod tidy重新整理依赖包时,发现需要下载内部项目的依赖包: image

objcoding commented 5 years ago

至于mac没有找到依赖包,我得重新重新安装一下go,也许是因为go1.9升级上来的,有些问题肯能跟升级有关,go mod刚出来时,我也遇到一个问题,如下: image

QuintinZhangQQ commented 5 years ago

这是idea 行为 code肯定是可以run 的

objcoding commented 5 years ago

还有,我看了blibli的代码,他们使用vendor构建的,他们内部依赖包之间的引用,用的是项目相对路径,并没有使用github路径,这也更加验证了 go mod 文件中第一行 module github.com/Terry-Mao/goim 的更深层次的含义了,它可以变更本地依赖包的相互依赖引用地址,不仅仅是远程依赖地址。

QuintinZhangQQ commented 5 years ago

https://github.com/developer-learning/reading-go 看这个github 这是个go 学习群 我也在里面

objcoding commented 5 years ago

感谢推荐!

QuintinZhangQQ commented 5 years ago

go mod 的使用 没啥问题 这个是编译器报错,需要打开编译器 image

objcoding commented 5 years ago

@HelloWorldZQ 对的,在goland设置打开了go modules之后,引用内部包必须跟 go mod 文件第一行包名一样。 我觉得这个改动挺好的,避免了相对路径引用以及github地址引用的混淆。

QuintinZhangQQ commented 5 years ago

所以可以close 这个issue

objcoding commented 5 years ago

感谢大佬,可以close,哈哈。