go modules 有没有像 maven 的 scope 那样提供机制?

Does go modules provide a mechanism like maven's scope?

说我是在开发一个系统A的插件p,所以p在开发测试的时候自然要依赖A

但是一旦 pA 集成,就不需要这种依赖了。在 Maven 中,可以使用 provided 范围声明依赖关系,以避免不必要的版本冲突。

如何在 go 模块中实现这一点?

不,不是。但这不是什么大问题。假设您有 foo_test.go,其中包括 foo/bar/baz 的依赖项。现在,这种依赖性只会 linked 进入测试二进制 go test 动态编译。它不会包含在 "main" 二进制文件中。

这是 Go 的一个优点 - 编译器识别需要链接的内容并使用 Go 模块,他有一个 material 的清单,它不仅按名称定义所需的依赖项,而且深入到提交。

如所写,将 go.mod 的内容更像是一份 material 的清单,在处理项目时有时需要这些清单,而不是一组说明建立一个 fat JAR.

旁注:即使是 Maven 依赖项通常也不会进入生成的 JAR。 Spring Boot 执行此操作,但这不是默认的 Maven 行为;建筑物 skinny JARs 是。