2 回答
TA贡献1863条经验 获得超2个赞
除了@Muhamed Keta 所写的内容之外,我还要添加一个建议,即为每个提供程序使用子包,而不是一个包含 10 个提供程序的 mega 包。这看起来像这样:
/cmd/app
/config
...
/lib # or /utils
/providers
/provider1
dtos.go
client.go
...
/provider2
dtos.go
client.go
...
在 go 中,包名称将成为一个命名空间和客户端代码要使用的非可选标识符/鉴别器。通过这种方式,您可以避免编写更长,冗余且有时断断续续的名称来区分提供商之间的提供商:
因此,在代码中使用您的提供程序而不是编写,您将拥有.这似乎是一种常见的围棋模式/最佳实践。providers.Provider1Clientprovider1.Client
这也意味着与每个提供程序的实现密切相关的所有代码都位于附近,从而防止名称冲突并帮助仅关注提供程序的开发人员。
我添加了一个(或替代)包,该包将包含可以在许多提供程序之间共享的通用代码。libutils
这是主观的,但希望我已经概述了一些合理的优点,因为语言的限制。
TA贡献1744条经验 获得超4个赞
首先,请注意,这个问题在某种程度上是固执己见的,对此没有正确的答案。
就个人而言,我喜欢有一个,子目录,因为它们包含启动/运行应用程序的逻辑,当像这样捆绑时,我觉得很好。cmd/appconfig
对于应用程序的其余部分,我喜欢采用扁平结构,仅当存在大量耦合时才进入子目录。在处理程序、数据库(如果有)和外部 API(如果有)之间分离层非常重要。
我会建议这样的事情:
/cmd/app
/config
/provider
provider1.go // contains the request response structs in itself
provider2.go // contains the request response structs in itself
provider.go
最后,更多的代码可能看起来不太可维护,但它比繁重的耦合代码更好。如果一个API突然决定切换有效负载格式,那么在其中一个文件中找到整个过程要容易得多,而不是在非常不同的子目录中搜索3。
- 2 回答
- 0 关注
- 120 浏览
添加回答
举报