单个go项目使用的go包的正确文件夹结构

时间:2017-01-08 14:21:54

标签: go structure organization

我目前正在开始使用Go,并且已经深入研究了有关包命名和工作区文件夹结构的问题。

尽管如此,我不太确定如何根据Go范例正确组织我的代码。

这是我当前的结构示例,因为它位于phi < 2*Pi*percentage

$GOPATH/src

所以我有一个名为github.com/myusername/project |-- main.go +-- internal +---- config |------ config.go 的项目使用project包,而config包专门用于project只能使用的方式。因此,我不希望它在github.com/myusername/config下,对吧?

现在的问题是,它是好的&#34;要使用内部包结构,还是应该将我的项目特定包放在github.com/myusername/$pkgname下,并以某种方式表明它属于project(例如将其命名为projectconfig)?

1 个答案:

答案 0 :(得分:0)

如果你的项目产生一个单一的程序,那么最常见的结构就是你提到的那个。

如果您的项目产生多个程序,通常的做法是使用这样的结构:

<project>/
  cmd/
    prog1/
      main.go
    prog2/
      main.go

如果您的项目公开将代码作为库供第三方使用,最常见的结构是使用项目的根目录来公开域模型和API。

<project>/
  model.go
  api.go

这是第三方代码,只需导入“github.com/user/project”并提供模型和api。

常见的是看到第二和第三个选项合并。

使用包来封装依赖项用法也是一种很好的做法。例如。假设您的项目使用弹性搜索客户端

<project>/
  cmd/
    prog1/
      main.go
  elastic/
    impl.go
  dao.go
  model.go

所以在dao.go中你定义了dao的API,然后在elastic / impl.go中你(导入弹性库,域模态和)根据弹性来定义DAO的实现。最后,从main.go导入生成实际程序的所有内容。

请参阅this关于此问题的简短介绍。