组织我的代码的惯用方法

时间:2014-05-23 21:21:13

标签: go

我觉得这个待定的'关闭问题,过于模糊,意见,......'但是这里有。

如何组织我的代码库?

我有一个非常重要的应用程序(unix守护程序),它与其他进程通信,读/写数据库,与Web服务器通信,具有内部状态。在c ++中,我会编写一堆类(可能在主子组件的子目录中)。让我们说这是projd

然后在更高级别,我有与项目相关的实用cli函数。 projcli1,projcli2 ....我假设与一个项目相关的所有代码都在一个GOPATH之下

如果我正在处理几个不相关的项目。我是否还使用一个GOPATH,或者每个项目都有一个。

我试图找到示例代码库,但唯一的大型集合是软件包存储库,这是一堆库 - 这实际上不是一回事。

如果这些问题太过模糊,那么这个问题。同一目录中的所有go文件必须是同一个包吗?

另一个简单的具体问题。我找到了一个很好的对象池实现。它的包裹说“游泳池” - 很好。我在哪里放置它的单个文件。在一个名为'pool'的子目录中,我想有一个名为utils(或类似的东西)的目录似乎我无法做到。我的意思是我不能拥有utils / pool和util / db(比如说)没有一个文件的树目录

1 个答案:

答案 0 :(得分:6)

你的问题相当模糊,但你确实在其中提出了几个可回答的问题。

首先,如果您还没有

,请先阅读http://golang.org/doc/code.html

你应该只需要一个GOPATH;你可以有几个并在它们之间切换,但我无法想到它的任何用例。

单个目录中的所有go文件必须属于同一个程序包,由编译器强制执行。

在Go中组织一个大型项目时,一切都是关于选择包并决定每个包中的代码。一些有用的提示:

  • 包依赖关系不能是循环的 - 如果你的理论布局有两个相互依赖的包,那就不行了
  • 子目录是完全不同的包 - 它们与父目录中的包没有特殊关系
  • 每个软件包应该是独立有用的 - 如果您必须导入软件包b以便使用软件包a中的内容,那么您的布局就会混乱
  • 不要害怕相对较大的软件包 - 起初在一个目录中有大量的go文件是很奇怪的(在其他语言中你使用子目录)但是它实际上并没有造成太多问题

对于您似乎正在谈论的大型项目,我发现它们通常最终会有三到四个包:一个或两个实现独立的核心组件,理论上可以在其他项目中重用,一个实现特定的作为库的应用程序功能,以及实现实际程序(守护程序或用户界面,或者你有什么)的应用程序功能。它总是取决于程序。

相关问题