后台管理系统是重复劳动的重灾区:用户、角色、菜单、日志,每个项目都要从头写一遍,权限判断写得一塌糊涂的也不在少数。Java 那套要装 JDK、导依赖、启动半分钟;纯前端模板又只有壳,后端接口和权限还是得自己补。
go-admin 把这块底子铺好了。后端是 Go + Gin + GORM,编译出来一个二进制跑全部;权限用 RBAC 加 Casbin 策略,登录鉴权走 JWT,操作日志、数据字典、任务调度、Swagger 接口文档都内置。v2.8.0,MIT 协议。我在 Windows 11 上从源码构建:编译 5 秒,迁移建出 24 张表,冷启动 748 毫秒可连,15 张界面截图共 162 次请求、0 个 4xx/5xx、0 个 JS 报错。
它是前后端分离的结构:后端只出接口,管理界面在配套的前端工程里。整套跑通不难,但有两个坑要先知道——包内自带的 SQLite 演示库必须带特定标签编译,version 子命令报的版本号也和发布标签对不上。下面把命令、数字和坑一起写清楚。
go-admin 是什么,和若依差在哪
一句话:它不是成品系统,是一套「把后台管理通用部分都写好」的基础平台,你在上面继续写业务。
- 后端 Go + Gin + GORM,编译产物是单个二进制,部署不用装运行时
- 权限是 RBAC 模型加 Casbin 策略引擎,用户、角色、菜单、部门四件套开箱即有
- 前后端分离,界面是独立的 Vue 3 + Element Plus 工程
- 内置代码生成器、操作日志、登录日志、数据字典、任务调度、Swagger 文档
和站里写过的若依对比着看更清楚。若依是 Java 全栈(Spring Boot + Vue),社区里工作流、报表这些二开积累厚,但部署要 JDK,包也大;go-admin 是 Go 后端,一个二进制、内存占用小,适合后端团队本来就是 Go 的场合。二者定位相同——都是让你别再把用户和权限重新写一遍。
我的测试环境
- Windows 11(10.0.26200),Go 1.27.3,Node 22.22.2,pnpm 10.9.7
- MySQL 8.0.29,新建库 goadmin_ymw(utf8mb4)
- 源码包 844,299 字节,解压后 410 个文件、88 个目录
- 项目要求 Go 1.27.1 或更高;同一份源码在 Linux 上的命令与 Windows 完全一致,下一节直接给
安装:Windows
先装好 Go 工具链(1.27.1 以上),解压源码包,构建:
tar -xzf go-admin-v2.8.0.tar.gz
cd go-admin-2.8.0
go build -o go-admin.exe .本轮实测构建 exit 0、用时 5 秒,产物 go-admin.exe 72,260,096 字节。不需要 cgo、不需要 GCC,这条默认命令即可(MySQL / PostgreSQL 配置下)。
安装:Linux
命令与 Windows 一字不差:
tar xzf go-admin-v2.8.0.tar.gz
cd go-admin-2.8.0
go build -o go-admin .
./go-admin migrate -c config/settings.yml
./go-admin server -c config/settings.ymlGo 是跨平台编译,同一份源码两侧产物行为一致。唯一注意点:要用包内自带的 SQLite 演示库,必须加 -tags sqlite3 且本机装有 GCC(cgo),否则启动即报错——详见后面「两个真实的坑」。
配置数据库与初始化
数据库四选一:MySQL 5.7+、PostgreSQL、SQL Server、SQLite,配置都在 config/settings.yml 里,改 database 段的 driver 与 source 即可。
本轮用的是 MySQL:先建库(utf8mb4),再执行迁移:
go-admin.exe migrate -c config/settings.yml实测 9.19 秒完成,输出 applied 15 migration(s),共建立 24 张表。包内还带了一份现成的 SQLite 演示库(go-admin-db.db)和对应的 settings.sqlite.yml,只想快速看效果可以先跑它。
启动与登录
go-admin.exe server -c config/settings.yml默认监听 8000 端口,本轮冷启动到首个 200 响应用了 748 毫秒。验证接口:GET / 返回 200(578 字节的欢迎页),Swagger 文档在 /swagger/admin/index.html,验证码接口 /api/v1/captcha 返回 200。
后台账号是 admin / 123456。后端本身不渲染管理界面——配套前端工程(Vue 3 + Element Plus + Vite)装依赖后 pnpm build:prod 构建(本轮 18.62 秒,产出 dist 共 281 个文件),把 dist 用任意静态服务托管、并把 /api 反向代理到 8000,浏览器打开就能登录。一级菜单 5 个,用户管理、角色管理、菜单管理、部门管理、操作日志、登录日志、服务监控、Swagger 文档都在里面,另有一个示例模块演示商品管理。
实测数据
本轮全部数字来自当次运行,环境见「我的测试环境」:
- 源码包:844,299 字节;解压 0.18 秒,410 文件 / 88 目录
- 构建:exit 0,5 秒;go-admin.exe 72,260,096 字节
- 迁移:9.19 秒,applied 15 migration(s),建表 24 张
- 启动:748 毫秒到首个 200;GET / 返回 200,0.0074 秒
- 登录:POST /api/v1/login 返回 200,token 长度 285(admin/123456,验证码字段填 0000)
- 菜单:GET /api/v1/menu 返回 200,一级菜单 5 个
- 前端构建:pnpm build:prod 18.62 秒,dist 281 文件 / 8,037,780 字节
- 截图:桌面 12 张 + 手机 3 张,共 162 次请求,4xx/5xx 0 个,JS 报错 0 个
界面长什么样

登录页是居中卡片式表单,输入 admin / 123456 即可进入后台。

控制台首页顶部是一排统计卡片,下方是信息区块;左侧深色菜单栏列出所有功能入口。

菜单管理是树形结构加编辑表格:左侧菜单树、右侧按需展开的新增与编辑区域,层级关系一目了然。

系统工具里的服务监控页,展示服务器运行状态信息。

内置的 Swagger 接口文档,登录、用户、菜单等接口分组列出,参数与响应结构都能直接展开看。

手机浏览器打开同样可用,页面自动收窄为单列布局,菜单收进顶部。
两个真实的坑
第一个,SQLite 演示库不是默认构建能跑的。 包内带了一份 go-admin-db.db 演示库,但直接 go build 出来的二进制里没有 sqlite3 驱动,初始化时会报:
database driver sqlite3 is not in this build原因是 sqlite3 驱动依赖 CGO,必须 go build -tags sqlite3 -o go-admin . 并且本机装 GCC。嫌麻烦就直接用 MySQL,默认构建就支持。
第二个,version 子命令报的版本号对不上发布标签。 本轮下载的是 v2.8.0 标签归档,但 go-admin.exe version 输出的是 2.4.0——项目自身版本常量没有同步。判断版本以你下载的标签和包内变更记录为准,不影响运行。
另外提醒一句:后端 8000 端口只出接口和欢迎页,浏览器打开看不到管理界面是正常的,别当 bug 排查半天。
上线部署
- Linux:systemd 服务托管后端二进制,前端 dist 交给 Nginx,/api 反代到 8000;不建议把 8000 直接对外开放
- Windows:用 nssm 或任务计划程序把 go-admin.exe 常驻
- 生产配置记得改 JWT 密钥与默认端口、换掉默认账号密码
这几类人适合,这几类不适合
适合:
- 后端用 Go、想省掉用户/角色/菜单/日志这些通用模块的团队
- 手上后台项目多,需要一套统一权限底座的
- 想要代码生成器快速出 CRUD 页面的
不适合:
- 想要一个开箱即用的成品系统直接上生产的——它是平台,业务要自己写
- 本机没有 Go 工具链也不想装的人——本项目不提供预编译二进制
- 业务深度依赖 Java 生态(工作流、报表插件)的——这种情况若依更顺手
常见问题
{collapse-item label="为什么 version 显示 2.4.0?"}A:项目自身版本常量没跟发布标签同步,本轮 v2.8.0 的归档里 version 输出 2.4.0。看版本以标签和包内变更记录为准。{/collapse-item}
{collapse-item label="初始化报 database driver sqlite3 is not in this build 怎么办?"}A:SQLite 驱动依赖 CGO,要用 -tags sqlite3 编译并装好 GCC;或者直接改用 MySQL,默认构建即支持。{/collapse-item}
{collapse-item label="后端起来了,浏览器打开 8000 端口为什么不是后台?"}A:后端只出接口和欢迎页,管理界面在独立前端工程里,构建出 dist 托管后反代 /api 到 8000 才能看到登录页。{/collapse-item}
{collapse-item label="登录接口的验证码怎么填?"}A:本轮实测 POST /api/v1/login 时验证码的 code 与 uuid 字段填 0000 可以通过(admin/123456)。{/collapse-item}
{collapse-item label="需要装 Redis 吗?"}A:默认关闭,不装也能跑。项目把它列为可选依赖,按需在配置里打开。{/collapse-item}
源码获取
建议先转存到自己网盘再下载。手机上打开链接点右下角「保存到网盘」,回头在夸克 App 的「我的网盘」里下载。