go - 组织 Go 程序 - 包或其他东西?

标签 go package organization code-organization

我已阅读Go Tour和谷歌搜索“golang packages”,但我还没有找到任何关于在 Go 中组织中等规模应用程序的最佳实践的建议。

如果我有一个应用程序在概念上有几个不同的部分,可能是 10^3-10^4 LOC,并且我不打算创建可重用的库供其他应用程序使用,所有源代码文件都应该是 包主要


澄清...

例如,假设我的程序将包含以下主要 block :

  • 管理一堆持久存储数据的东西
    • 允许通常的创建、读取、更新、删除操作
  • 允许人们查看存储数据的东西
  • 在这些之间协调/调解的东西
  • 使用 SOAP 从网络服务定期获取数据更新的东西。

所以这将是 MVC 加上数据 getter 。

环顾四周人们的所作所为,我现在怀疑我应该

  • 创建$GOPATH/src/myprogramname
  • 在里面放一些 main.gopackage mainfunc main() { ... }
  • 创建一些子目录,例如
    • $GOPATH/src/myprogramname/model
    • $GOPATH/src/myprogramname/view
    • $GOPATH/src/myprogramname/control
    • $GOPATH/src/myprogramname/fetch
  • 让这些子目录中的 .go 文件以 package fetch 等开头。包名称始终与子目录名称匹配。
  • 我的 main.go 可能会import ( ... "fetch"; "model"; "view"; "control")
  • 随着 main.go 的增长,将其拆分为其他大小合理的 .go 文件,这些文件根据用途命名。
  • 构建程序,包括*.go在上述包子目录下

     cd $GOPATH/src/myprogramname
     go build
    

这就是我需要做的吗?这是组织事物的正确惯用的 Go 方式吗?还有更多我应该知道或想到的吗?是否有一些我忽略的规范网页或 PDF 应该阅读以找出这些东西?

简而言之,我不想要包含所有内容的 10,000 行 main.go。根据众所周知的结构化编程和/或 OO 原则,将代码组织成文件、子目录、包和与正常概念划分相对应的任何其他组织单元的惯用 Go 原则是什么?

最佳答案

您可以根据函数的封装级别将您的项目分解为多个层,即在单独的包中具有低级函数,而在主包中具有逻辑函数。 (你可以从类似 MVC 的架构中激发自己的灵感) 由于我们没有关于您的代码的任何详细信息,因此很难看出哪种架构最适合。

但最终您的选择将基于代码简单性/可重用性的平衡。

关于go - 组织 Go 程序 - 包或其他东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694108/

相关文章:

Python——如何组织 pubsub 消息?

testing - 你如何使用 go (golang) gocheck 测试框架的基准标志?

google-app-engine - 只能从 Google App Engine golang 应用程序访问请求日志

查找器中的Xcode组织?

python - 迭代 package_data 文件并将它们复制到当前工作目录

java - 我应该使用包名还是类名来表示一个概念?

XCode 7 - 如何重新排列源代码元素

go - 我如何创建一个通用函数来在 go lang 中接收 map ?

Golang 将环境变量编译成二进制

python - 运行 setuptools 测试时访问包的 `__init__.py` 中定义的名称