我对Golang目录结构有些困惑。
基于一本名为《 <走的路>》的书,应将项目代码放在
1 2 3 4 5 6 7 8 9 10 | a"?a"€a"€src/ | a"?a"€a"€main.go | a"?a"€a"€say/ | | a"?a"€a"€say.go | | a"?a"€a"€say_test.go a"?a"€a"€bin/ | a"?a"€a"€say a""a"€a"€pkg/ a""a"€a"€linux_amd64/ a""a"€a"€say.a |
但是我发现
例如:
https://github.com/facebookgo/grace
https://github.com/astaxie/beego
因此,我不知道是否需要
我有一些项目,它们具有相互依赖性。
它们在私有的GitLab存储库中进行管理。
如何组织它们?
- 您的书可能描述的是GOPATH目录树。
- 非常感谢,我很愚蠢
- 可能已经晚了,但是go项目样板的另一个很好的例子是qiangxue的入门工具包-github.com/qiangxue/golang-restful-starter-kit
当我刚开始使用Go时,本·约翰逊(Ben Johnson)撰写的这篇文章已经指导了我。
从这样的东西开始通常是很好的(假设您位于项目目录中,例如
1 2 3 4 5 6 7 8 9 10 | a"?a"€a"€cmd/ -- this is where you compose several packages in to main package | a"?a"€a"€foo -- an example would be `foo` | | a"?a"€a"€main.go a"?a"€a"€pkg/ -- this is where put your reusable packages | a"?a"€a"€pkg1 -- reusable package 1 | a"?a"€a"€pkg2 -- reusable package 2 a"?a"€a"€otherpackage1 | a"?a"€a"€ ... a"?a"€a"€otherpackage2 | a"?a"€a"€ ... |
您可以在
有时这取决于您的需求。在我们的工作流程中,我们正在使用一个名为Fresh的热代码重载工具,因此我们需要将
1 2 3 4 5 6 7 8 | a"?a"€a"€app/ | a"?a"€a"€app.go a"?a"€a"€model/ -- | a"?a"€a"€model.go a"?a"€a"€store | a"?a"€a"€store.go a"?a"€a"€main.go -- this is where the app starts a"?a"€a"€... |
在
1 2 3 4 | ... func main(){ log.Fatal(app.Run()) } |
现在有新的方式来组织golang项目。
进入github的golang标准,据说:
This is a basic layout for Go application projects. It represents the
most common directory structure with a number of small enhancements
along with several supporting directories common to any real world
application.This project layout is intentionally generic and it doesn't try to
impose a specific Go package structure.
或者您可以按照以下幻灯片操作:
1 2 3 4 5 6 7 8 9 10 | $GOPATH/ src/ github.com/user/repo/ mypkg/ mysrc1.go mysrc2.go cmd/mycmd/ main.go bin/ mycmd |
- 尽管回购包含一些有趣的观点,但它似乎不是golang的官方指南。换句话说,这只是对该主题的"另类"意见,因此我不会将其定位为"新方法",因为"新方法"听起来像是取代现有方法的最终指导。
这本书描述了签出后的目录结构。如果本书包含.git目录,这将是有帮助的。
$ GOPATH / src是导入工作所必需的。
1 2 3 4 5 6 7 8 9 10 11 12 | a"?a"€a"€src/ | a"?a"€a"€.git | | a"?a"€a"€... | a"?a"€a"€main.go | a"?a"€a"€say/ | | a"?a"€a"€say.go | | a"?a"€a"€say_test.go a"?a"€a"€bin/ | a"?a"€a"€say a""a"€a"€pkg/ a""a"€a"€linux_amd64/ a""a"€a"€say.a |
实际上,main.go实际上位于反映远程git存储库的路径中,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | . a"?a"€a"€ bin a"??? a""a"€a"€ say a"?a"€a"€ pkg a"??? a""a"€a"€ linux_amd64 a"??? a""a"€a"€ github.com a"??? ?? a""a"€a"€ pschultz a"??? ?? a""a"€a"€ hello-world a"??? a""a"€a"€ say.a a""a"€a"€ src ?? a""a"€a"€ github.com ?? a""a"€a"€ pschultz ?? a""a"€a"€ hello-world ?? a"?a"€a"€ .git ?? a"? a""a"€a"€ ... ?? a"?a"€a"€ main.go ?? a""a"€a"€ say ?? a"?a"€a"€ say.go ?? a""a"€a"€ say_test.go |
不需要src目录,实际上许多公共存储库都不使用此结构。
组织项目有几种不同的方式。如果您打算让其他存储库(例如lib)使用您的项目。我建议使用这样的cmd结构。如果启动应用程序的方法不止一种,那么这也是推荐的方法。 (可复制的main.go文件)
1 2 3 4 5 6 | a"?a"€a"€cmd/ | a"?a"€a"€(application name) | | a"?a"€a"€main.go a""a"€a"€say/ a"?a"€a"€say.go a""a"€a"€say_test.go |
否则,例如,如果它是一个独立的应用程序。您可以将main.go放置在存储库的根目录中。
bin和pkg可以保留在根目录中,并将其添加到.gitignore中。 (假设您正在使用git)
- bin和pkg应该位于
GOPATH 的根目录中,它们根本不应该位于项目目录中,就像src一样。 -
github上的golang标准
golang-standards/project-layout 在src 目录上是一致的。