go modules 有没有像 maven 的 scope 那样提供机制?
Does go modules provide a mechanism like maven's scope?
说我是在开发一个系统A
的插件p
,所以p
在开发测试的时候自然要依赖A
。
但是一旦 p
与 A
集成,就不需要这种依赖了。在 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 是。
说我是在开发一个系统A
的插件p
,所以p
在开发测试的时候自然要依赖A
。
但是一旦 p
与 A
集成,就不需要这种依赖了。在 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 是。