授课语音

Go 代码目录规范

Go 语言的项目结构应尽量遵循一定的规范,以提高代码的可维护性和可扩展性。以下是 Go 语言项目常见的目录结构和推荐的组织方式。

1. 基本目录结构

Go 项目的基本目录结构一般遵循以下形式:

/project-name
    /cmd
    /pkg
    /internal
    /api
    /web
    /scripts
    /deployments
    /configs
    /test
    go.mod
    go.sum

1.1 cmd

该目录包含所有的应用程序的入口文件(main.go)。每个应用程序通常有一个单独的子目录。例如:

/cmd
    /myapp
        main.go
    /myapp-cli
        main.go

cmd 目录用于存放具体应用的启动程序代码,避免与业务逻辑代码混淆。

1.2 pkg

该目录包含其他应用程序和服务可以共享的库文件。通常情况下,这些包是可以公开使用的。

/pkg
    /utils
    /handlers
    /services

pkg 目录用于存放公共的代码库,其他 Go 项目可以直接导入这些库。

1.3 internal

该目录包含只对当前项目可见的库。internal 下的包只能被当前项目引用,不能被外部项目引用。

/internal
    /auth
    /models
    /repository

internal 目录是 Go 的特性之一,用于组织项目内部使用的代码,限制外部访问。

1.4 api

该目录用于存放与外部接口相关的代码,如 REST API 定义、gRPC 协议文件等。

/api
    /v1
        user.proto
        user_service.go
    /v2
        order.proto
        order_service.go

api 目录主要用于管理接口和协议文件。

1.5 web

该目录存放与 Web 相关的代码,比如前端静态文件、HTML 模板文件等。

/web
    /static
        /css
        /js
    /templates
        index.html

web 目录用于存放和 Web 相关的静态文件、模板等。

1.6 scripts

该目录包含一些辅助性的脚本文件,例如部署脚本、数据库迁移脚本等。

/scripts
    build.sh
    deploy.sh

scripts 目录用于存放自动化工具、构建、部署等脚本。

1.7 deployments

该目录存放与应用部署相关的配置文件。

/deployments
    /kubernetes
        deployment.yaml
    /docker
        Dockerfile

deployments 目录用于存放与应用部署相关的配置,如 Kubernetes、Docker 等。

1.8 configs

该目录存放应用程序的配置文件,通常是 .json.yaml.toml 格式。

/configs
    config.yaml

configs 目录用于存放环境配置文件,支持应用程序运行时的动态配置。

1.9 test

该目录用于存放单元测试和集成测试代码。

/test
    /unit
        auth_test.go
    /integration
        user_integration_test.go

test 目录是专门存放测试代码的地方,方便进行单元测试和集成测试。

2. Go 代码规范

在 Go 项目的实际开发中,应遵循以下几个基本规范:

  • 命名规范:Go 语言采用小写字母和驼峰命名法。文件名和目录名通常使用小写字母。
  • 包结构:一个包应该只包含与其功能相关的代码,不要出现“杂乱”的包。
  • 依赖管理:Go 提供了 go mod 来管理依赖,项目中应使用 Go Modules 来处理依赖关系。

3. 总结

通过合理的目录组织,可以提高 Go 项目的可维护性和扩展性。cmd 目录用于存放应用入口,pkginternal 用于存放共享或内部的代码,apiweb 用于存放接口和 Web 相关的代码。其他辅助性目录如 scriptsdeploymentsconfigs 用于存放相关配置和脚本,test 用于存放测试代码。

去1:1私密咨询

系列课程: