一个类似于Nest.js的golang框架-Jsonix
Jsonix 是基于 Go + Fiber 开发的一套全新的框架,使用 dig 注入的模式进行全局数据处理, 旨在规范代码和提高项目开发效率。
该框架提供了一系列命令行工具(CLI),用于服务管理、项目初始化、代码生成以及自动化数据库迁移等任务。采用模块化设计,支持 controller、service、repository 等代码结构快速生成,并集成了丰富的功能模块, 在 controller、service、repository 使用 cli 生成的时候会自动在module文件中进行注入。
详细文档
主要功能
CLI 工具支持。
基础
web
功能支持。fiber
框架支持。apifox
自动上传支持。swagger
生成支持。gorm
数据库 ORM 支持。redis
缓存支持。i18n
国际化支持。logger
日志支持。cors
跨域支持。jsonix
热重载支持。dig
依赖注入支持。配置文件读取支持。
提供多个基础配置:
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的方案去写文档注释, 不过可以通过配置选择是使用swagger
、apifox
还是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 模块文件