Golang 的项目结构应该如何设计?

Golang项目的最佳实践目录结构如下:

project/
    |--bin/             # 可执行文件       
    |--cmd/             # 命令          
    |   |--cmd1/   
    |   |--cmd2/
    |--pkg/             
    |   |--pkg1/       
    |   |--pkg2/   
    |--vendor/          #  第三方依赖   
    |--docs/            # 文档       
    |--.gitignore               
    |--README.md        # 项目说明
    |--Makefile                      
  • bin目录用于放可执行文件,通常只有一个 main.go 文件;
  • cmd目录用于存放不同用途的命令程序,每个子目录代表一个可以独立build 的命令;
  • pkg目录放项目内可复用的包,开发人员可以在cmd和pkg目录间复用包;
  • vendor目录放第三方依赖包;
  • docs目录用于存放项目相关的文档;
  • .gitignore用于git仓库屏蔽不需要推送的文件;
  • README用于简要介绍项目信息;
  • Makefile 用于定义build规则。

该目录结构具有以下特点:

  1. 隔离:cmd和pkg目录下的代码隔离,降低耦合度
  2. 复用:pkg目录下的包可在cmd和pkg之间共享
  3. 独立:每个cmd目录代表一个独立build的命令或应用
  4. 分层:cmd→pkg→vendor,第三方依赖拆分到vendor中
  5. 文档丰富:提供相关文档和说明
  6. 效率高:提供快速build脚本

总的来说,该项目架构实现了:

  • 隔离
  • 复用
  • 独立
  • 分层
  • 文档丰富
  • 效率高

这些特点可以保证项目结构清晰、包间耦合低、便于维护管理。