用于在Go中组织项目文件的Cmd文件夹

ami*_*nab 11 go

我已经搜索了在项目中组织Go文件的解决方案并找到了这篇文章.我想知道该cmd文件夹的作用是什么,该帖子的第二部分使用了该文件夹.这对Go编译器来说是一个神奇的词吗?另一方面,我正在阅读Go文档,那里没有任何cmd文件夹.

那么这个文件夹怎么样?在Go中构建项目文件的最佳实践是什么,它支持源文件,项目二进制文件,第三方软件包和单元测试.

lfr*_*ree 8

那么这个“cmd”文件夹呢?

帖子已经说得很清楚,概括地说:

  1. 这不是 Go 中的魔法或标准。这只是一个约定。
  2. 将它们放入根文件夹中不可能的子文件夹时,您可以拥有多个二进制文件。
  3. 通过让您将二进制文件作为客户端而不是应用程序的主机或门户,它可以引导您采用所谓的“库驱动开发”方式来构建您的程序。这种分离“帮助您进行更清晰的抽象”和更常见的代码逻辑。

在 Go 中构建支持源文件、项目二进制文件、第 3 方包和单元测试的项目文件的最佳实践是什么。

我不确定最佳实践。官方文档有很多关于项目文件结构的提示。在我个人的实践中,除了cmd二进制文件的文件夹之外,我
1. 将源文件分组到文件夹内的包(子文件夹)中src
2. 将 3rd 方包复制到供应商文件夹;
3. 将单元测试文件与其目标源文件并排放置。

这些链接可能会有所帮助:

组织 Go 代码
Go 博客:组织 Go 代码
Go 博客:包名称
golang-standards/project-layout

  • `golang-standards/project-layout` 可能应该从您的链接中删除。关于其非“标准”提案的问题正在进行长时间的讨论。有关更多信息,请检查存储库中的 [issue 117](https://github.com/golang-standards/project-layout/issues/117) (4认同)

gol*_*her 2

您引用的帖子的作者 明确表示,Camlistore 应用程序向他介绍了 cmd 约定。

如果您查看Camlistore的源代码,您会注意到该项目使用自定义系统进行构建,即“make.go”。

cmd 是特殊的,只是因为 Camlistore 项目使用“go run make.go”来构建,并且 make.go 知道如何在 cmd 目录中构建目标。或者在更一般的情况下,仅当您使用将其视为特殊的构建系统时, cmd 才是特殊的。