Go 语言
项目结构、风格和命名惯例
Go 项目结构

Go 项目结构

最小标准布局

Go 应用项目结构的标准是什么,官方始终没有给出答案。不过 Russ Cox 作为 Go 语言项目的技术负责人在一个开源项目中的 issue 中给出了一个最小标准布局,如下:

go.mod
xx.go
yy.go

go.mod
package1/
    xx.go
    yy.go
package2/
    zz.go

非官方标准的结构布局

二进制可执行文件项目结构

Go语言的项目结构通常遵循一种简单而清晰的布局,这有助于代码的组织和维护。典型的 Go 项目结构包括以下目录:

  1. cmd: 存放应用的主要入口点。通常每个可执行程序都会有一个单独的子目录。
  2. pkg: 存放可被其他项目引用的库代码。这个目录中的代码应该是独立于具体应用的通用功能。
  3. internal: 类似于pkg,但这里的代码只能被当前项目的其他包引用,而不可被外部项目引用。
  4. api: 存放协议文件和API定义,如Protocol Buffers文件等。
  5. web: 存放Web服务器相关的代码,包括前端资源、静态文件等。
  6. scripts: 存放一些辅助性的脚本,比如构建脚本、数据导入脚本等。
  7. configs: 存放配置文件,可以包括各种环境的配置文件,如开发环境、生产环境等。
  8. deployments: 存放部署相关的文件,如Dockerfile、Kubernetes配置文件等。
  9. tests: 存放测试代码。
  10. docs: 存放文档,可以包括项目文档、API文档等。
  11. tools: 存放一些工具代码,这些代码通常不会被直接引用,而是在构建、测试或其他开发过程中使用。

这只是一个通用的结构,具体的项目结构可能会因项目类型和规模而有所不同。在 Go 语言中,推崇简单和直观的项目结构,使得代码易于理解和维护。

库类型的项目结构

如果只是构建一个库(library),Go语言的库项目结构可以更为简洁。以下是一个通用的构建Go库的项目结构示例:

  1. pkg: 存存放可被其他项目引用的库代码。这个目录中的代码应该是独立于具体应用的通用功能。
  2. internal: 类似于pkg,但这里的代码只能被当前项目的其他包引用,而不可被外部项目引用。
  3. examples: 存放库的使用示例代码。这有助于其他开发者更容易理解你的库的用法。
  4. test: 存放库的测试代码。
  5. docs: 存放与库有关的文档,包括使用说明、API文档等。
  6. README.md: 存放项目的简要说明和用法示例。

整体而言,一个库项目通常就包含这些基本元素。注意,Go语言的约定是,库代码应该在pkg目录中,以便于被其他项目导入。这使得库的使用更加清晰和简单。