我目前正在开始使用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
)?
答案 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关于此问题的简短介绍。