整理了一个golang web项目目录规划, 大家觉得如何?

261 阅读1分钟

之前一直用 controller, model, service 这套目录在写项目(老项目是基于beego开发的), 做复杂后越发感觉代码都写在一坨了, 划分得不够清晰. 还经常出现相互引用的情况, 最近整理了一套新的目录结构, 大家给点建议?

- main.go
- cmd    // 放一些shell脚本
    - start.sh
    - kill.sh
    - build.sh
- apitest  // 接口测试用例
    - api_test.go
    - api_test.http
- docs  // 
- scripts // 数据操作脚本, 包括数据修复及数据查询导出等
    - fix_xxx.py
- server // http 及 rpc 初始化, 中间件, 路由等
    - router.go
    - mw
        - jwt
        - logger
        - otel
        - ratelimit
        - cors
- biz  // 业务代码, 包括api或rpc handler, 业务数据操作, 业务逻辑(service)
    - handler
    - dal // 数据访问层, 数据接口实现
    - model
        - wire // 用于解决包相互引用(定义interface)
        - repo // 定义数据层对象及数据接口        
    - service // 业务逻辑
- pkg // 一些全局依赖包
    - config 
    - constant
    - utils
- xxx-common // 通用共享包
    - pkg
        - utils
        - errno
        - logger
    - rpc // rpc定义 及相关生成代码
        - idl
        - xxx_gen
    - infra // 基础组件封装及初始化
        - kafka
        - nacos
        - mysql
        - postgres
        - es
        - redis
        - clickhouse
    - cloud // 其他云接口调用
        - aliyun
        - tencentcloud
        - xxxcloud