一个高性能、易扩展的Golang后台管理框架,提供完整的后台管理功能和丰富的组件支持。专为现代化Web应用设计,适用于企业级后台系统、API服务、微服务架构等场景。
English | 简体中文
- 认证授权:完整的JWT认证与RBAC权限管理
- 依赖注入:清晰的依赖注入体系,简化组件使用
- 多语言支持:基于i18n的国际化支持,方便全球化应用
- 消息队列:集成RabbitMQ支持普通队列和延迟队列,高效处理异步任务
- 定时任务:基于cron的定时任务管理器,精确控制任务执行
- 缓存支持:Redis缓存管理,支持多种数据结构与分布式锁
- 健康检查:服务健康状态监控与自动恢复
- 日志记录:结构化日志记录与管理,支持多级别输出
- 参数验证:强大的请求参数验证,确保数据安全
- API文档:Swagger自动生成API文档,简化接口对接
- 数据库:集成Gorm支持多种数据库,优化数据查询性能
- 微服务支持:内置服务发现与负载均衡,简化微服务架构
- 监控告警:系统性能监控与故障告警机制
- 优雅关闭:支持优雅停机,确保任务平滑过渡
- 高性能:采用Go语言高并发特性,提供卓越的性能表现
- 易扩展:模块化设计,轻松扩展新功能
- 低耦合:基于依赖注入,组件间松耦合
- 开箱即用:丰富的内置组件,减少开发工作量
- 安全可靠:内置多重安全机制,保障系统稳定运行
- 文档完善:详尽的文档和丰富的使用示例
git clone https://github.com/yourusername/go-admin.git
cd go-admin
go mod tidy
修改configs/config.yaml
配置文件,设置数据库、Redis等连接信息。
app:
name: Go-Admin
mode: development
port: 8080
mysql:
host: localhost
port: 3306
user: root
pass: password
dbname: go_admin
redis:
host: localhost
port: 6379
pass: ""
db: 0
go run main.go
http://localhost:8080/swagger/index.html
框架集成了多种常用组件,使开发更加便捷:
用于数据缓存、计数器、分布式锁等场景,提供高效的数据存取:
// 在服务中使用Redis缓存
func (s *UserService) GetUserProfile(userID string) (*User, error) {
cacheKey := fmt.Sprintf("user:%s", userID)
// 尝试从缓存获取
user, err := s.redisCache.Get(ctx, cacheKey)
if err == nil {
return user, nil
}
// 从数据库获取并缓存
user, err = s.userRepo.FindByID(userID)
if err != nil {
return nil, err
}
s.redisCache.Set(ctx, cacheKey, user, 30*time.Minute)
return user, nil
}
用于异步处理、任务分发、事件广播等,支持普通队列和延迟队列:
// 发送消息
s.messageQueue.Push(ctx, "order_created", orderData)
// 设置消费者
msgs, _ := s.messageQueue.Consume(ctx, "order_created", "order-processor")
go func() {
for msg := range msgs {
// 处理订单消息
processOrder(msg.Body)
msg.Ack(false)
}
}()
用于定期执行任务、数据统计、报表生成等:
// 添加定时任务
s.cronManager.AddTask("daily-report", "0 0 0 * * *", func() error {
return s.generateDailyReport()
})
// 管理任务
s.cronManager.RemoveTask("task-id")
监控服务健康状态,支持自定义检查策略,确保系统可靠运行:
// 注册健康检查
s.healthCheck.Register(&DatabaseChecker{
db: s.db,
})
// 获取健康状态
status := s.healthCheck.Check(ctx)
admin/
├── app/ # 应用代码
│ ├── api/ # API控制器
│ │ ├── v1/ # API版本1
│ │ └── v2/ # API版本2
│ ├── backend/ # 后端服务
│ │ ├── controller/ # 控制器
│ │ ├── service/ # 服务层
│ │ └── model/ # 数据模型
│ └── generate/ # 代码生成
├── configs/ # 配置文件
│ └── config.yaml # 主配置文件
├── deployments/ # 部署相关
├── docs/ # 文档
│ ├── api/ # API文档
│ └── guide/ # 使用指南
├── pkg/ # 公共包
│ ├── auth/ # 认证
│ ├── cache/ # 缓存
│ ├── container/ # 依赖注入容器
│ ├── cron/ # 定时任务
│ ├── db/ # 数据库
│ ├── logger/ # 日志
│ ├── mq/ # 消息队列
│ ├── health/ # 健康检查
│ ├── types/ # 类型定义
│ └── validator/ # 验证器
├── routes/ # 路由定义
├── scripts/ # 脚本
└── tests/ # 测试
├── cron/ # 定时任务测试
├── health/ # 健康检查测试
├── rabbitmq/ # 消息队列测试
└── redis/ # Redis缓存测试
- 在
app/api/v1
目录下定义API控制器
// UserController 用户控制器
type UserController struct {
userService *service.UserService
}
// NewUserController 创建用户控制器
func NewUserController(userService *service.UserService) *UserController {
return &UserController{
userService: userService,
}
}
// GetProfile 获取用户资料
// @Summary 获取用户资料
// @Description 获取当前登录用户的详细资料
// @Tags 用户
// @Accept json
// @Produce json
// @Security ApiKeyAuth
// @Success 200 {object} response.Response{data=model.User}
// @Router /api/v1/user/profile [get]
func (c *UserController) GetProfile(ctx *gin.Context) {
userID := ctx.GetString("user_id")
user, err := c.userService.GetUserProfile(userID)
// 处理响应...
}
- 在
app/backend/service
中实现业务逻辑
// UserService 用户服务
type UserService struct {
db *gorm.DB
redisCache *service.RedisService
}
// NewUserService 创建用户服务
func NewUserService(db *gorm.DB, redisCache *service.RedisService) *UserService {
return &UserService{
db: db,
redisCache: redisCache,
}
}
// GetUserProfile 获取用户资料
func (s *UserService) GetUserProfile(userID string) (*model.User, error) {
// 实现业务逻辑...
}
- 在
app/backend/model
中定义数据模型
// User 用户模型
type User struct {
ID uint `json:"id" gorm:"primaryKey"`
Username string `json:"username" gorm:"unique;not null"`
Email string `json:"email" gorm:"unique;not null"`
Password string `json:"-" gorm:"not null"`
Status int `json:"status" gorm:"default:1"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
- 在
routes
目录中注册路由
// 注册用户相关路由
func registerUserRoutes(r *gin.RouterGroup, authMiddleware gin.HandlerFunc, userController *controller.UserController) {
userGroup := r.Group("/user").Use(authMiddleware)
{
userGroup.GET("/profile", userController.GetProfile)
userGroup.PUT("/profile", userController.UpdateProfile)
// 其他路由...
}
}
所有核心组件都是通过依赖注入的方式使用,无需手动初始化:
// 服务中使用Redis
type UserService struct {
redisService *service.RedisService
db *gorm.DB
messageQueue types.MessageQueue
}
func NewUserService(redisService *service.RedisService, db *gorm.DB, messageQueue types.MessageQueue) *UserService {
return &UserService{
redisService: redisService,
db: db,
messageQueue: messageQueue,
}
}
// 使用Redis缓存
func (s *UserService) GetUserByID(id string) (*User, error) {
cacheKey := "user:" + id
// 尝试从缓存获取
data, err := s.redisService.Get(cacheKey)
// ...
}
- 用户认证与授权:完整的JWT认证实现
- 商品管理系统:包含分类、商品、库存管理
- 订单处理流程:订单创建、支付、发货、完成
- 统计报表生成:销售统计、用户分析、趋势图表
# 构建镜像
docker build -t go-admin .
# 运行容器
docker run -p 8080:8080 \
-e MYSQL_HOST=mysql_host \
-e REDIS_HOST=redis_host \
-e APP_MODE=production \
go-admin
# 应用部署配置
kubectl apply -f deployments/k8s/
# 查看部署状态
kubectl get pods -l app=go-admin
- 使用环境变量覆盖敏感配置
- 启用TLS加密和请求限流
- 配置日志收集与监控
- 设置定期数据备份
框架内置了多种性能优化措施:
- 连接池:数据库和Redis连接池管理
- 缓存策略:多级缓存设计,减少数据库压力
- 请求合并:合并重复请求,降低下游服务压力
- 异步处理:非核心流程异步处理
- 资源监控:实时监控资源使用情况,及时发现瓶颈
- 问题反馈:通过 GitHub Issues 提交问题
- 功能请求:通过 GitHub Discussions 讨论新功能
- 贡献代码:欢迎提交 Pull Request
MIT License - 您可以自由使用、修改和分发本项目的代码