omgind
gin-admin的肩膀上, 根据个人喜好魔改的后台工程模板
站在one more gin admin => omgind
特性
- 遵循
RESTful API
设计规范 & 基于接口的编程规范 - 基于
GIN
框架,提供了丰富的中间件支持(JWTAuth、CORS、RequestLogger、RequestRateLimiter、TraceID、CasbinEnforce、Recover、GZIP) - 基于
Casbin
的 RBAC 访问控制模型 -- 权限控制可以细粒度到按钮 & 接口 - 基于
entgo
的数据库 ORM - 基于
WIRE
的依赖注入 -- 依赖注入本身的作用是解决了各个模块间层级依赖繁琐的初始化过程 - 基于
Logrus & Context
实现了日志输出,通过结合 Context 实现了统一的 TraceID/UserID 等关键字段的输出(同时支持日志钩子写入到Gorm
/entgo
) - 基于
JWT
的用户认证 -- 基于 JWT 的黑名单验证机制 - 基于
Swaggo
自动生成Swagger
文档 -- 独立于接口的 mock 实现 - 基于
net/http/httptest
标准包实现了 API 的单元测试 - 基于
go mod
的依赖管理(国内源可使用:https://goproxy.cn/)
依赖工具
go get -u github.com/cosmtrek/air
go get -u github.com/google/wire/cmd/wire
go get -u github.com/swaggo/swag/cmd/swag
- air -- Live reload for Go apps
- wire -- Compile-time Dependency Injection for Go
- swag -- Automatically generate RESTful API documentation with Swagger 2.0 for Go.
依赖框架
- Gin -- The fastest full-featured web framework for Go.
- entgo -- Simple, yet powerful ORM for modeling and querying data.
- Casbin -- An authorization library that supports access control models like ACL, RBAC, ABAC in Golang
- Wire -- Compile-time Dependency Injection for Go
快速开始
$ git clone https://github.com/heromicro/omgind
$ cd omgind
# 使用AIR工具运行
$ air
# OR 基于Makefile运行
$ make start
# OR 使用go命令运行
$ go run cmd/omgind/main.go web -c ./configs/config.toml -m ./configs/model.conf --menu ./configs/menu.yaml
启动成功之后,可在浏览器中输入地址进行访问:http://127.0.0.1:10088/swagger/index.html
swagger
文档
生成# 基于Makefile
make swagger
# OR 使用swag命令
swag init -d ./cmd/${APP}/,internal/ --output ./internal/app/swagger
重新生成依赖注入文件
# 基于Makefile
make wire
# OR 使用wire命令
wire gen ./internal/app
omgind-cli 工具使用
创建项目
omgind-cli new -d test-omgind -p test-omgind -m
快速生成业务模块
创建模板 task.yaml
name: Task
comment: 任务管理
mixin: "sort, time, active, memo"
fields:
- name: Code
type: string
comment: 任务编号
required: true
max: 16. # 配置最大字符数
min: 0 # 配置最少字符数
index: unique # true, false unique
- name: Name
type: string
comment: 任务名称
required: true
max: 16
min: 0
index: false
- name: Person
type: int32
comment: 任务人数
required: true
max: 32 # 配置最大值
min: 5 # 配置最小值
- name: Memo
type: string
comment: 任务备注
required: false
format swag comment
swag fmt
执行生成命令并运行
cd test-omgind
omgind-cli g -d . -p test-omgind -f ./task.yaml
# 生成 swagger
make swagger
# 生成依赖项
make wire
# 运行服务
make start
前端工程
- 基于Ant Design React版本的实现:omgind-react
Questions
sqlite3
运行出现:'stdlib.h' file not found
OSX 下基于 export CGO_ENABLED=1; export CC=gcc; go get -v -x github.com/mattn/go-sqlite3
MIT License
Copyright (c) 2021 heromicro/omgind