Skip to content

Gin framework is used as the core of this project to build a template, based on this project can quickly complete business development

License

Notifications You must be signed in to change notification settings

wannanbigpig/gin-layout

Repository files navigation

gin-layout

Go CodeQL Go Report Card GitHub license Go Version

基于 Gin 框架的企业级 Go 项目脚手架(Go Admin 后台管理系统),开箱即用的 Go 管理后台框架,快速构建 RESTful API 服务和管理后台系统

前端项目: go-admin-ui - 基于 Vue 3 + Element Plus 的管理后台前端项目

API 文档: 在线文档 - 完整的接口文档和使用说明

演示地址: 在线演示 - 可直接体验完整的管理后台功能

📌 项目简介

gin-layout 是一个功能完整的 Go Admin 后台管理系统框架,专为快速构建企业级管理后台而设计。本项目提供了完整的 RBAC 权限管理、JWT 认证、日志系统等核心功能,是构建 Go 管理后台、Go Admin Panel、Go 后台管理系统的理想选择。

✨ 特性

  • 🚀 开箱即用 - 完整的 Go Admin 项目结构,无需从零开始搭建
  • 🔐 RBAC 权限管理 - 基于 Casbin 的完整权限控制系统,适合构建 Go 管理后台系统
  • 📝 JWT 认证 - 支持 Token 生成、刷新和黑名单管理,保障 Go Admin 系统安全
  • 📦 数据库迁移 - 使用 migrate 进行数据库版本管理
  • 📊 日志系统 - 基于 zap 的高性能日志,支持文件和控制台输出
  • 🔄 CORS 支持 - 完整的跨域资源共享配置
  • 📤 文件上传 - 支持公开/私有文件存储,UUID 标识
  • 🛡️ 参数验证 - 基于 validator 的请求参数验证
  • 📈 请求日志 - 自动记录 API 请求日志,便于 Go Admin 系统监控
  • 🎯 统一响应 - 标准化的 API 响应格式
  • ⚙️ 配置管理 - 基于 Viper 的灵活配置系统
  • 🔧 CLI 工具 - 支持 server、command、cron 等多种命令
  • 📱 软删除 - 支持数据库软删除功能
  • 🔒 数据加密 - 支持敏感数据加密存储(如 Token 加密)

📋 目录结构

gin-layout/
├── cmd/                    # 命令行工具
│   ├── service/           # 服务器启动命令
│   ├── command/           # 单次执行命令
│   ├── cron/              # 定时任务
│   └── version/           # 版本信息
├── config/                # 配置文件
│   ├── autoload/          # 配置结构体定义
│   └── config.yaml.example  # 配置示例文件
├── data/                  # 数据层
│   ├── migrations/        # 数据库迁移文件
│   ├── mysql.go          # MySQL 连接
│   └── redis.go          # Redis 连接
├── internal/              # 内部代码(不对外暴露)
│   ├── controller/        # 控制器层
│   ├── service/           # 业务逻辑层
│   ├── model/             # 数据模型
│   ├── middleware/        # 中间件
│   ├── pkg/               # 内部工具包
│   ├── resources/         # 资源转换器
│   ├── routers/           # 路由定义
│   └── validator/         # 参数验证
├── pkg/                   # 公共包(可对外暴露)
│   └── utils/             # 工具函数
├── storage/               # 文件存储
│   ├── public/            # 公开文件
│   └── private/           # 私有文件
├── logs/                  # 日志文件目录
├── main.go                # 程序入口
└── README.md              # 项目说明

🚀 快速开始

本 Go Admin 框架支持快速搭建管理后台系统,适用于企业级 Go 后台管理系统开发。

环境要求

  • Go >= 1.23
  • MySQL >= 5.7
  • Redis >= 5.0 (可选)

安装步骤

  1. 克隆项目
git clone https://github.com/wannanbigpig/gin-layout.git
cd gin-layout
  1. 安装依赖
go mod download
  1. 配置数据库

安装 migrate 工具(安装文档

执行数据库迁移:

migrate -database 'mysql://root:root@tcp(127.0.0.1:3306)/go_layout?charset=utf8mb4&parseTime=True&loc=Local' \
  -path data/migrations up
  1. 配置应用

首次运行会自动从 config/config.yaml.example 复制配置文件到项目根目录的 config.yaml

编辑项目根目录的 config.yaml,配置数据库和 Redis 连接信息:

mysql:
  enable: true
  host: 127.0.0.1
  port: 3306
  database: go_layout
  username: root
  password: your_password

redis:
  enable: true
  host: 127.0.0.1
  port: 6379
  password: ""
  database: 0
  1. 启动服务

正常启动(日常使用):

GO_ENV=development go run main.go service

首次初始化(仅首次部署时需要):

首次部署时,需要初始化数据库中的 API 路由表和菜单-API 映射关系。你可以选择两种方式:

方式一:完整初始化系统(推荐)

一键完成所有初始化操作,包括回滚迁移、重新执行迁移、初始化路由和路由映射:

GO_ENV=development go run main.go command init-system

该命令会执行以下操作:

  1. 回滚所有数据库迁移
  2. 重新执行所有迁移
  3. 重新初始化 API 路由表
  4. 重新初始化菜单-API 映射关系

方式二:分步初始化

如果需要分步执行,可以使用以下命令:

步骤 1:初始化 API 路由表

扫描系统中定义的所有 API 路由并写入 a_api 表:

GO_ENV=development go run main.go command api-route

该命令会自动扫描系统中定义的所有 API 路由,并将路由信息(路径、方法、处理器等)写入 a_api 表中,用于权限管理和 API 文档生成。

步骤 2:初始化菜单-API 映射关系

API 路由表初始化完成后,建立菜单与 API 的映射关系:

GO_ENV=development go run main.go command menu-api-map

该命令会根据 casbin_rule 表中的权限规则,自动建立默认菜单与 API 的映射关系,初始化 a_menu_api_map 表。

重要提示

  • 初始化命令是独立的,可以随时单独执行
  • 日常启动服务时直接使用 go run main.go service 即可,无需任何参数
  • 如果只需要更新 API 路由表或菜单映射,可以单独执行对应的初始化命令
  • command init-system 命令会直接执行,无需确认
  • 系统会在每天凌晨2点自动执行初始化任务(通过 go-layout cron 启动定时任务服务)

生产模式:

go build -o go-layout main.go
./go-layout service
  1. 测试接口
# 健康检查
curl http://127.0.0.1:9001/ping
# 响应: {"message":"pong"}

# 示例接口
curl http://127.0.0.1:9001/admin/v1/demo

📖 使用说明

Go Admin 系统功能

本框架提供了完整的 Go 管理后台功能,包括:

  • 用户管理 - 管理员用户管理、角色分配、部门管理
  • 权限管理 - 基于 RBAC 的权限控制系统,支持角色、菜单、API 权限管理
  • 登录认证 - JWT Token 认证、登录日志记录、Token 刷新机制
  • 日志管理 - 登录日志、请求日志记录和查询
  • 菜单管理 - 动态菜单配置,支持多级菜单
  • API 管理 - API 路由自动扫描和权限配置

命令行工具

项目支持多种命令,使用 -h 查看帮助:

go run main.go -h

可用命令:

  • service - 启动 API 服务器
  • command - 执行单次命令(包括初始化命令)
    • command api-route - 初始化 API 路由表
    • command menu-api-map - 初始化菜单-API 映射关系
    • command init-system - 初始化系统数据(回滚迁移、重新执行迁移、重新初始化路由和路由映射)
    • command demo - 执行示例命令
  • cron - 启动定时任务(每天凌晨2点自动执行系统初始化)
  • version - 查看版本信息

配置说明

配置文件位置:

  • 开发模式:项目根目录的 config.yaml
  • 生产模式:执行文件所在目录的 config.yaml
  • 自定义路径:可通过 -c--config 参数指定配置文件绝对路径

主要配置项:

  • app - 应用配置(环境、调试模式、语言等)
  • jwt - JWT 配置(密钥、过期时间等)
  • mysql - MySQL 数据库配置
  • redis - Redis 配置
  • logger - 日志配置(输出方式、文件切割等)

详细配置说明请参考 config/config.yaml.example

配置文件查找顺序

  1. 如果通过 -c--config 参数指定了路径,使用指定的配置文件
  2. 开发模式(GO_ENV=development):从当前工作目录查找 config.yaml
  3. 生产模式:从执行文件所在目录查找 config.yaml

API 路由

  • 公开接口 - /admin/v1/login/admin/v1/login-captcha
  • 需要认证 - 其他接口需要在请求头中携带 Authorization: Bearer <token>

分支说明

  • basic_layout - 基础脚手架分支,提供干净的开发环境
  • x_l_admin - 管理台服务分支,包含完整的 RBAC 权限管理

前端项目

本项目配套的前端管理后台项目:

  • go-admin-ui - 基于 Vue 3 + Element Plus + Vite 构建的现代化管理后台前端
    • 完整的 RBAC 权限控制
    • 动态路由和菜单生成
    • 响应式布局设计
    • 丰富的组件和工具函数

🚢 部署

构建

# 构建可执行文件
go build -o go-layout main.go

使用 Supervisor 管理进程

创建 /etc/supervisor/conf.d/go-layout.conf

[program:go-layout]
command=/path/to/go-layout service -c=/path/to/config.yaml
directory=/path/to/go-layout
autostart=true
autorestart=true
startsecs=5
user=www-data
redirect_stderr=true
stdout_logfile=/path/to/go-layout/supervisord.log

启动服务:

supervisorctl reread
supervisorctl update
supervisorctl start go-layout

Nginx 反向代理

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:9001;
    }
}

Docker 部署(可选)

FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o go-layout main.go

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/go-layout .
COPY --from=builder /app/config/config.yaml.example ./config.yaml
# 或者使用自定义配置文件路径:
# CMD ["./go-layout", "service", "-c", "/path/to/config.yaml"]
EXPOSE 9001
CMD ["./go-layout", "service"]

⚙️ 生产环境注意事项

  1. 配置文件路径 - 生产环境建议使用 -c 参数指定配置文件的绝对路径,或确保 config.yaml 位于执行文件所在目录
  2. 日志路径 - 配置 base_path,日志文件会保存在 {base_path}/logs/ 目录
  3. JWT 密钥 - 确保 JWT secret_key 足够复杂且保密
  4. 数据库连接 - 配置合适的连接池大小
  5. CORS 配置 - 生产环境建议配置具体的允许源,而不是允许所有源

🛠️ 技术栈

本 Go Admin 框架采用现代化的技术栈,为构建高性能的管理后台系统提供坚实基础。

核心框架

认证与权限

数据存储

  • MySQL - 关系型数据库
  • Redis - 缓存数据库

工具库

更多依赖请查看 go.mod 文件。

📝 开发指南

构建 Go Admin 系统

使用本框架可以快速构建功能完整的 Go 管理后台系统,支持用户管理、权限控制、数据管理等核心功能。

添加新接口

  1. internal/controller/ 创建控制器
  2. internal/service/ 实现业务逻辑
  3. internal/routers/ 注册路由
  4. internal/validator/form/ 定义参数验证

数据库迁移

创建新的迁移文件:

migrate create -ext sql -dir data/migrations -seq add_user_table

执行迁移:

migrate -database 'mysql://...' -path data/migrations up

回滚迁移:

migrate -database 'mysql://...' -path data/migrations down

🔍 相关搜索关键词

  • Go Admin - Go 后台管理系统框架
  • Go 管理后台 - 基于 Gin 的管理后台系统
  • Go Admin Panel - Go 管理面板框架
  • Go 后台框架 - 企业级 Go 后台管理系统
  • Go Admin System - 完整的 Go 管理后台解决方案
  • Gin Admin - 基于 Gin 框架的管理后台
  • Go 管理系统 - RBAC 权限管理的 Go 系统
  • Go 后台管理 - 开箱即用的 Go Admin 框架

🤝 贡献

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证,详情请查看 LICENSE 文件。

🙏 致谢

感谢所有为这个项目做出贡献的开发者!

📮 联系方式

如有问题或建议,请通过以下方式联系:


⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!

About

Gin framework is used as the core of this project to build a template, based on this project can quickly complete business development

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 2

  •  
  •