Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Golang 项目组织形式的演进 #5

Open
wweir opened this issue Oct 26, 2018 · 4 comments
Open

Golang 项目组织形式的演进 #5

wweir opened this issue Oct 26, 2018 · 4 comments

Comments

@wweir
Copy link
Owner

wweir commented Oct 26, 2018

https://wweir.cc/post/golang-项目组织形式的演进/

@Hyvi
Copy link

Hyvi commented Apr 10, 2019

如果一个项目用到了某使用 go modules 进行版本管理的包,go build 会下载该包 modules 配置文件中提及的所有的包,即使在我们的代码依赖树上用不到该包。但却不会使用该第三方包 go.mod 文件中的定义好的地址替换规则,需要在我们自己的项目中自行定义。

硬是没看懂这话。老铁解释下

@wweir
Copy link
Owner Author

wweir commented Apr 10, 2019

@Hyvi
举个例子:

我们自己的 A 项目依赖第三方项目 B, A、B 项目都使用 go modules 作为依赖管理方式。

B 中功能较多,我们只用到其中一小部分,这部分只用到标准库,没有任何其它依赖。但是 B 中其他部分复杂度较高,依赖了一大票 golang.org/x/net 底下的包。B 项目管理者为了解决拉包问题,在 go.mod 中把 golang.org/x/net replace 为 github.com/golang/net

下面,问题来了。go mod 分析依赖时,会找到 B,同时会选择拉取 B 的 go.sum 中的依赖包,包括我们本不需要的 golang.org/x/net。但是,go mod 却不会使用 B 的 go.mod 中定义的 replace 规则,还是从 golang.org 拉包,从而莫名撞墙

@Hyvi
Copy link

Hyvi commented Apr 17, 2019

如果一个项目用到了某使用 go modules 进行版本管理的包,go build 会下载该包 modules 配置文件中提及的所有的包,即使在我们的代码依赖树上用不到该包。但却不会使用该第三方包 go.mod 文件中的定义好的地址替换规则,需要在我们自己的项目中自行定义。

如果一个项目用到了某使用 go modules 进行版本管理的第三方包,go build 会下载该包 modules 配置文件(即go.mod)中提及的所有的包,即使在我们的代码依赖树上用不到该包,也不会使用该包 go.mod 文件中的定义好的地址替换规则,需要在我们自己的项目中自行定义。

我理解了,修改下原来语句,个人觉得更好些。
非常感谢

@wweir
Copy link
Owner Author

wweir commented Apr 17, 2019

@Hyvi 多谢,我更新一下文章

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants