【发布时间】:2019-12-12 16:28:29
【问题描述】:
说我在开发一个系统A的插件p,所以p在开发和测试的时候自然要依赖A。
但是一旦p 与A 集成,这种依赖就没有必要了。在 Maven 中,可以使用 provided 范围声明依赖项,以避免不必要的版本冲突。
如何在 go 模块中实现这一点?
【问题讨论】:
标签: go go-modules
说我在开发一个系统A的插件p,所以p在开发和测试的时候自然要依赖A。
但是一旦p 与A 集成,这种依赖就没有必要了。在 Maven 中,可以使用 provided 范围声明依赖项,以避免不必要的版本冲突。
如何在 go 模块中实现这一点?
【问题讨论】:
标签: go go-modules
不,它没有。但这不是什么大问题。假设您有foo_test.go,其中包括对foo/bar/baz 的依赖。现在,这种依赖关系只会被 linked 动态编译到测试二进制文件 go test 中。它不会包含在“主”二进制文件中。
这是 Go 的一个优点 - 编译器识别需要链接的内容并使用 Go 模块,他有一份材料清单,不仅按名称定义所需的依赖项,而且还包括提交。
正如所写,将go.mod 的内容更像是处理项目时需要的材料清单,而不是构建fat JAR 的一组说明。
旁注:即使是 maven 依赖项通常也不会进入生成的 JAR。 Spring Boot 会这样做,但这不是默认的 Maven 行为;正在建设skinny JARs。
【讨论】:
foo/bar/baz,而不是 int 测试代码呢?