Go工程化:目录的组织

项目目录

/vendor 目录

  • 其中包含所有依赖的第三方源代码
  • 当既有mod又有vendor的时候,可用命令go mod vendor来创建项目的vendor目录

/third_party

  • 魔改过的第三方源码包
  • 跟vendor区分,方便更新

/pkg

  • 与/internal相对
  • 外部项目可以直接导入,可以在/internal包中建立/pkg包,表示该包只能在此项目中共享,

/api

  • api接口的定义文件,yml,protobuf等
  • 以及通过这些定义文件生成的client代码

项目工具,构建和部署相关

Makefile

  • 编译工程代码的指令入口
  • 方便使用者对工程进行编译

/scripts

  • 存放脚本文件,完成构建,安装,分析检查等功能
  • Makefile文件中各个指令的具体实现

/tools

  • 项目的一些脚本工具
  • 可以调用/pkg和/internal下面的代码

/build

  • 主要存放安装包和持续集成相关的文件
  • 比如Dockerfile文件

/deployments

  • 存放系统和容器编排部署配置和模板
  • 比如docker-compose

/init

  • 应用初始化相关脚本
  • 比如systemd,和经常管理(比如supervisord)配置

外部测试代码和数据

/test

  • 第三方的测试代码

文档

/docs

  • 开发文档,用户手册,安装指南,设计文档等

/examples

  • 存放工程内部和工程中可悲外部导入的包的示例代码
  • 企业内部公共包可以提供使用这些包构建的一些内部项目地址

README.md

  • 一般包含项目介绍,功能和安装指南,文档地址等

CHANGELOG

  • 每次发版的内容

不建议的目录

/src

  • GOPATH模式下,代码会被放到$GOPATH下面的src目录下
  • 在导入路径中就会包含两个src目录

/model

  • 不建议将实体类型都放到model目录里
  • 按照业务领域来划分
  • 参考:https://gitee.com/phper95/kratos-layout/tree/master/internal

/common、/util

  • 无法看出包的具体功能
  • 容易变成大杂烩

实际项目中的工程化设计

实际工程第三方包

|---cache
|---db
|---errors
|---es
|---httpclient
|---logger
|---mq
|---nosql
|---promethues
|---routine
|---shutdown
|---timeutil
|---trace

实际工程代码目录

|---config
|---const
|---deploy
|---doc
|---init
|---internal
    |---biz
    |---data
    |---pkg
    |   |---errcode
    |   |---metric
    |   |---sign
    |
    |---repo
    |   |---mongodb
    |   |---mysql
    |       |---auth_repo
    |
    |---server
        |---api
        |   |---api_response
        |   |---v1
        |
        |---middleware
        |   |---auth
        |   |---jwt
        |
        |---service
            |---auth_service   

Reference
慕课网:面向海量数据场景构建Go+ES8企业级搜索微服务

你可能感兴趣的:(Go,Go工程化)