2017-10-09 212 views
3

我对Golang目录结构有一些疑惑。Golang项目目录结构

基于书名为<要走的路>,项目代码应放入src,并建议使用以下目录结构。

├──src/ 
    | ├──main.go 
    | ├──say/ 
    | | ├──say.go 
    | | ├──say_test.go 
    ├──bin/ 
    | ├──say 
    └──pkg/ 
     └──linux_amd64/ 
      └──say.a 

,但我发现,许多软件包在github.com,没有src目录。

例如:

https://github.com/facebookgo/grace

https://github.com/astaxie/beego

所以,我不知道是否需要src目录。

我有一些项目,他们有相互依赖。 他们在一个私人的GitLab存储库中进行管理。

我该如何组织他们?

+8

您的书可能描述的内容是GOPATH目录的树。 –

+0

非常感谢,我很愚蠢 –

+0

可能是迟到了,但去项目样板的另一个很好的例子是强学的入门工具包 - https://github.com/qiangxue/golang-restful-starter-kit – nevermind

回答

-1

src目录是不需要的,实际上很多公共存储库不使用这个结构。

有几种组织项目的不同方式。如果你打算让你的项目被其他仓库使用,比如lib。我会建议使用像这样的cmd结构。如果有更多的方法启动应用程序,这也是推荐的方法。 (可多主main.go文件)

├──cmd/ 
| ├──(application name) 
| | ├──main.go 
└──say/ 
    ├──say.go 
    └──say_test.go 

否则,例如,如果它是一个独立的应用程序。您可以将main.go放入存储库的根目录中。

bin和pkg你可以保留在根目录下并添加到.gitignore。 (假设你正在使用git)

+0

bin和pkg应该在'GOPATH'的根,它们不应该在项目目录中,就像src一样。 – Adrian

1

本书描述了结账后的目录结构。如果该书包含.git目录,那将会很有帮助。

$ GOPATH/src是导入工作所必需的。

├──src/ 
    | ├──.git 
    | | ├──... 
    | ├──main.go 
    | ├──say/ 
    | | ├──say.go 
    | | ├──say_test.go 
    ├──bin/ 
    | ├──say 
    └──pkg/ 
     └──linux_amd64/ 
      └──say.a 

在实践中,main.go实际上是在反映远程git仓库的路径,例如

. 
├── bin 
│   └── say 
├── pkg 
│   └── linux_amd64 
│    └── github.com 
│       └── pschultz 
│        └── hello-world 
│       └── say.a 
└── src 
   └── github.com 
    └── pschultz 
     └── hello-world 
      ├── .git 
      │ └── ... 
      ├── main.go 
      └── say 
       ├── say.go 
       └── say_test.go 
1

This文章本·约翰逊一直指导我在这当我开始用走。

这是通常一个好的开始是这样的(假设你是你的项目目录里面像$GOPATH/src/myproject

├──cmd/ -- this is where you compose several packages in to main package 
| ├──foo -- an example would be `foo` 
| | ├──main.go 
├──pkg/ -- this is where put your reusable packages 
| ├──pkg1 -- reusable package 1 
| ├──pkg2 -- reusable package 2 
├──otherpackage1 
| ├── ... 
├──otherpackage2 
| ├── ... 

你可以看看this例如从go-kit对于这种项目结构

有时它取决于你的需求。在我们的工作流程中,我们使用了一个名为fresh的热门代码重新加载工具,因此我们需要将main.go置于项目根目录下,以便该工具可以检测到所有文件更改并重建源代码。

├──app/ 
| ├──app.go 
├──model/ -- 
| ├──model.go 
├──store 
| ├──store.go 
├──main.go -- this is where the app starts 
├──... 

app.go包,我有一些像func Run() error其中启动应用程序。在main.go上,我只是调用函数:

... 
func main(){ 
    log.Fatal(app.Run()) 
}