示例场景
我有一个带很多对象的AWS S3存储桶,我的几个应用程序需要访问这些对象。应用程序使用一些可用的信息来形成S3对象名称,获取对象并在对象数据上进行转换,然后再将其用于应用程序特定的进一步处理。
我想创建一个模块,该模块将保留用于形成对象名称的逻辑,从S3获取它,然后对对象数据进行转换,这样我就不会在多个地方复制这些功能。
在这种情况下,我应将AWS开发工具包添加为模块中的依赖项吗?请记住,应用程序可能必须将AWS开发工具包用于该应用程序的其他特定用途,或者根本不需要它。
通常,解决此类问题(即在哪里添加依赖项)的最佳方法是什么?以及如何管理不同的版本?
答案 0 :(得分:2)
如果您的代码必须从AWS开发工具包访问包,则可以,您别无选择,只能将其添加为依赖项。如果不是这样,并且逻辑是通用的,或者您可以将其从AWS开发工具包中抽象出来,那么您就不需要依赖项(实际上,像go mod tidy
这样的go工具将从{{1 }}(如果添加)
答案 1 :(得分:1)
在这种情况下,我应将AWS开发工具包添加为模块中的依赖项吗? 请记住,应用程序可能必须将AWS开发工具包用于 特定于该应用程序的其他内容,或者它们可能不需要 完全没有。
是的,如果您模块中的任何软件包都依赖于AWS开发工具包,那么Go Modules系统将添加AWS开发工具包作为模块的依赖项。您应该对模块没有什么特别的事情。
在Go 1.11或更高版本上尝试使用此脚本(并确保在GOPATH中无法使用):
树:
moduledir/packagedir1
moduledir/packagedir2
食谱:
cd moduledir
go mod init moduledir ;# or go mod init github.com/user/moduledir
食谱:
go install ./packagedir1
go install ./packagedir2
模块事物应该可以自动运行!
通常,解决此类问题(即在哪里添加依赖项)的最佳方法是什么?以及如何管理不同的版本?
模块系统将自动管理模块的依赖关系,并将其记录在文件go.mod和go.sum中。如果需要覆盖某些依赖关系,则应使用“ go get”命令。例如,请参见以下问题:How to point Go module dependency in go.mod to a latest commit in a repo?
您还可以在以下位置找到有关模块的更多信息:https://github.com/golang/go/wiki/Modules