一个类似于Nest.js的golang框架-Jsonix

Jsonix 是基于 Go + Fiber 开发的一套全新的框架,使用 dig 注入的模式进行全局数据处理, 旨在规范代码和提高项目开发效率。

该框架提供了一系列命令行工具(CLI),用于服务管理、项目初始化、代码生成以及自动化数据库迁移等任务。采用模块化设计,支持 controller、service、repository 等代码结构快速生成,并集成了丰富的功能模块, 在 controller、service、repository 使用 cli 生成的时候会自动在module文件中进行注入。

详细文档

github

主要功能

CLI

$ jsonix --help

  Usage: jsonix server

  Options:
    -e, --env <string>                  设置当前服务运行环境 (dev, prod, test)
    -w, --watch                         启用配置文件热重载
    -s, --show <string>                 查看指定端口是否被占用
    -k, --kill <string>                 杀死指定端口的进程
    -h, --help                          查询文档

  Usage: jsonix gen                     注: module 的生成需要在你的app目录运行(文件结构可参考下方), 其他的生成需要在 module 目录运行

  Options:
    -m, --module <string>               指定模块名称
    -s, --service                       生成服务代码
    -c, --controller                    生成控制器代码
    -r, --repository                    生成仓库代码
    -e, --entity                        生成实体代码
    -o, --override                      覆盖已存在的文件
    -h, --help                          查询文档

  Usage: jsonix migrate                 生成数据库自动迁移文件(注: 需在根目录执行, 当然也可通过参数自定义)

  Options:
    -r, --root <string>                 指定项目根目录
    -d, --dest <string>                 指定自动迁移文件输出目录
    -h, --help                          查询文档

  Usage: jsonix init                    初始化项目

  Options:
    -h, --help                          查询文档

配置文件读取

因为我是一个前端开发出身, 因此我比较喜欢前端的那种支持不同环境的配置文件和本地的配置文件做法, 因此我在golang开发的时候也做了一个合并处理。当前规范如下:

├─ config          
│  ├─ config.yaml             
│  ├─ config.dev.yaml         
│  ├─ config.dev.local.yaml         
│  ├─ config.test.yaml         
│  ├─ config.test.local.yaml         
│  ├─ config.pro.yaml         
│  └─ config.pro.local.yaml         

当然, 文件夹和文件也可以根据自己喜好自己命名, 也可以支持toml类型文件读取, 但是目前尚未支持nocos的使用, 后期将逐步支持。

文档生成

当前还是需要使用swagger的方案去写文档注释, 不过可以通过配置选择是使用swaggerapifox还是openapi

项目文件结构

├─ .vscode                     # VSCode 推荐配置
├─ .run                        # GoLand 运行命令
├─ apps                        # 应用模块
│  ├─ example                  # 示例模块
│  │  ├─ controller           # 控制器
│  │  ├─ repository          # 仓库
│  │  ├─ service             # 服务
│  │  └─ entry               # 入口文件
│  └─ ...                     # 其他模块
├─ auto_migrate               # 自动迁移目录(可通过 jsonix migrate 命令生成, 无需改动)
│  └─ ...                     # 自动迁移文件
├─ config                     # 配置文件目录
│  ├─ config.yaml            # 配置文件
│  ├─ config.dev.yaml        # 开发环境配置
│  ├─ config.test.yaml       # 测试环境配置
│  ├─ config.prod.yaml       # 生产环境配置
│  ├─ config.local.yaml      # 本地环境配置
│  ├─ config.dev.local.yaml  # 开发本地环境配置
│  ├─ config.test.local.yaml # 测试本地环境配置
│  ├─ config.prod.local.yaml # 生产本地环境配置
│  ├─ regexes.yaml           # uaparser 配置文件
│  └─ ...                     # 其他配置文件
├─ configs                    # 配置文件实例目录
│  ├─ configs.yaml           # 全部配置实例
│  └─ ...                     # 其他配置实例文件
├─ core                       # 核心模块目录
├─ docs                       # swagger 文档目录
├─ locales                    # 语言包目录
├─ logs                       # 日志目录
├─ middleware                 # 中间件目录
├─ tmp                        # air 启动临时文件(不要改动, 不要提交)
├─ utils                      # 工具函数目录
├─ .air.toml                  # air 配置文件
├─ main.go                    # 主函数
├─ go.mod                     # Go 模块文件
└─ go.sum                     # Go 模块文件
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!