初学者入门:用 go-kratos-admin + protoc-gen-typescript-http 快速搭建企业级 Admin 系统
作为后端开发者,你是否曾为前后端接口联调头疼?作为前端新手,是否觉得手动封装 Rest 接口繁琐又容易出错?今天就给大家推荐一套 "效率组合拳"------go-kratos-admin(开箱即用的全栈 Admin 框架)+ protoc-gen-typescript-http(Protobuf 驱动的 TS 接口生成器),让你从零到一快速搭建企业级管理系统,还能自动生成类型安全的前端接口,生产力直接翻倍!
一、先搞懂:这两个工具到底是什么?
在动手之前,我们先简单理清核心工具的定位,避免盲目上手:
1. go-kratos-admin:全栈 Admin 的 "脚手架王者"
它是一个基于 Go 微服务框架go-kratos 和 Vue3 框架Vben Admin开发的前后端分离项目,主打 "开箱即用"。后端集成了用户管理、租户管理、权限控制等企业级必备功能,前端自带美观的管理界面和交互逻辑,不用你从零搭建项目结构、设计数据库表、开发基础功能,相当于直接拿到一个 "半成品"Admin 系统,你只需专注业务开发。
核心优势:
- 后端:
Golang+go-kratos+ent/gorm,支持多租户、数据权限、动态 API 等企业级特性 - 前端:
Vue3+TypeScript+Antdv+Vben Admin,界面美观、组件丰富 - 部署灵活:支持单体架构开发 / 部署,新手也不用纠结微服务复杂度
- 功能齐全:内置用户、角色、组织、任务调度、文件管理等 17 + 核心模块
2. protoc-gen-typescript-http:接口生成的 "效率神器"
这是 go-kratos 生态下的 TypeScript 代码生成器,核心作用是根据 Protobuf 文件自动生成前端 Rest 接口客户端和类型定义。简单说,后端只要定义好 Protobuf 接口协议,前端就能直接拿到可调用的 TS 代码,不用手动写 axios 请求、不用反复核对接口参数、不用维护类型定义,彻底解决前后端接口联调的 "沟通成本" 和 "手写错误"。
核心优势:
- 类型安全:生成的 TS 类型与后端完全对齐,避免类型不匹配问题
- 自动封装:直接生成可调用的服务客户端,不用手动写请求函数
- 协议驱动:基于 Protobuf 定义接口,前后端遵循统一标准,减少分歧
- 无缝集成:与 go-kratos 天然兼容,完美适配 go-kratos-admin 的后端架构
二、环境准备:一步到位搭好开发环境
工欲善其事,必先利其器。我们先把基础环境配齐,这里以 Ubuntu 系统为例(Windows/Mac 步骤类似,可参考官方文档):
1. 必备基础软件
- Git:版本控制工具(默认多数系统已安装)
- Docker:容器化部署依赖(用于启动数据库、缓存等中间件)
- Golang 1.20+:后端开发环境
- Node.js 16+ & pnpm:前端开发环境(pnpm 比 npm/yarn 更快)
- Protobuf 编译器(protoc):用于解析.proto 文件(生成 TS 接口依赖)
安装命令参考(Ubuntu):
bash
# 安装Docker
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
# 安装Golang(可参考官方脚本)
curl -fsSL https://raw.githubusercontent.com/tx7do/go-kratos-admin/main/backend/script/prepare_ubuntu.sh | bash
# 安装Node.js和pnpm
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
npm install -g pnpm
# 安装Protobuf编译器
sudo apt-get install -y protobuf-compiler
2. 安装核心工具
bash
# 安装TS接口生成器
go install github.com/go-kratos/protoc-gen-typescript-http@latest
三、快速上手:30 分钟搭建可运行的 Admin 系统
接下来我们一步步搭建项目,从拉取代码到启动系统,再到生成第一个 TS 接口:
步骤 1:拉取 go-kratos-admin 项目
bash
git clone https://github.com/tx7do/go-kratos-admin.git
# 如果只能访问内网则拉取:git clone https://gitee.com/tx7do/go-kratos-admin.git
cd go-kratos-admin
步骤 2:启动后端服务(含依赖中间件)
go-kratos-admin 提供了 Makefile 脚本,一键启动所有依赖(数据库、Redis 等)和后端服务:
bash
# 进入后端目录
cd backend
# 初始化依赖、构建Docker镜像、启动服务
make init
make docker
make compose-up
启动成功后,后端服务默认运行在http://localhost:7788,可以访问http://localhost:7788/docs查看 Swagger 接口文档,默认账号密码都是admin。
步骤 3:启动前端项目
bash
# 回到项目根目录,进入前端目录
cd ../frontend
# 安装依赖(pnpm速度更快)
pnpm install
# 启动开发模式(默认端口5666)
pnpm dev
打开浏览器访问http://localhost:5666,用admin/admin登录,就能看到完整的 Admin 系统界面,包含用户管理、租户管理等所有内置功能。
步骤 4:用 protoc-gen-typescript-http 生成 TS 接口
这一步是核心!我们以 "用户管理接口" 为例,演示如何自动生成 TS 客户端:
4.1 找到后端 Protobuf 定义
go-kratos-admin 的接口协议都放在backend/api目录下,比如用户管理的 Proto 文件backend/api/admin/v1/i_user.proto,里面定义了查询用户、创建用户等接口,关键部分如下:
protobuf
syntax = "proto3";
package admin.service.v1;
import "google/api/annotations.proto"; // 引入http注解依赖
import "pagination/v1/pagination.proto"; // 分页请求
import "user/service/v1/user.proto";
// 用户管理服务
service UserService {
// 获取用户列表
rpc List (pagination.PagingRequest) returns (user.service.v1.ListUserResponse) {
option (redact.v3.internal_method) = true;
option (google.api.http) = {
get: "/admin/v1/users" // 绑定HTTP GET请求
};
}
// 获取用户数据
rpc Get (user.service.v1.GetUserRequest) returns (user.service.v1.User) {
option (redact.v3.internal_method) = true;
option (google.api.http) = {
get: "/admin/v1/users/{id}" // 绑定HTTP GET请求
additional_bindings {
get: "/admin/v1/users/username/{user_name}" // 绑定HTTP GET请求
}
};
}
// 创建用户
rpc Create (user.service.v1.CreateUserRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/admin/v1/users" // 绑定HTTP POST请求
body: "*"
};
}
// 更新用户
rpc Update (user.service.v1.UpdateUserRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/admin/v1/users/{data.id}" // 绑定HTTP PUT请求
body: "*"
};
}
// 删除用户
rpc Delete (user.service.v1.DeleteUserRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/admin/v1/users/{id}" // 绑定HTTP DELETE请求
};
}
}
4.2 生成 TS 接口代码
在后端服务的目录下backend\app\admin\service下执行Make命令:
bash
make ts
执行成功后,该命令将会在frontend\apps\admin\src\generated\api\admin\service\v1目录下生成index.ts文件,里面包含:
- 所有消息类型的 TS 接口(如
CreateUserRequest、User...) - 自动封装的服务客户端接口(
createUserServiceClient) - 可直接调用的接口方法(
List、Get、Create、Update...)
4.3 前端项目中使用生成的接口
TS代码生成器生成的代码,本身不提供请求的实现,需要自己去实现RequestHandler:
typescript
// frontend/apps/admin/src/utils/request.ts
/**
* 通用请求处理器
* @param path 访问路径
* @param method 方法
* @param body 访问内容
*/
export function requestClientRequestHandler({ path, method, body }: Request) {
return requestClient.request(path, {
method,
data: body,
} as any);
}
然后就可以开始在前端组件中开始调用接口了,在go-kratos-admin当中,所有的接口调用都放在了pinia的状态管理当中,我们以用户服务为例:
typescript
// frontend/apps/admin/src/stores/user.state.ts
import { defineStore } from 'pinia';
import { requestClientRequestHandler } from '#/utils/request';
import { createUserServiceClient } from '#/generated/api/admin/service/v1';
export const useUserStore = defineStore('user', () => {
const service = createUserServiceClient(requestClientRequestHandler);
/**
* 查询用户列表
*/
async function listUser(
noPaging: boolean = false,
page?: null | number,
pageSize?: null | number,
formValues?: null | object,
fieldMask?: null | string,
orderBy?: null | string[],
) {
return await service.List({
// @ts-ignore proto generated code is error.
fieldMask,
orderBy: orderBy ?? [],
query: makeQueryString(formValues ?? null),
page,
pageSize,
noPaging,
});
}
/**
* 获取用户
*/
async function getUser(id: number) {
return await service.Get({ id });
}
/**
* 创建用户
*/
async function createUser(values: object) {
return await service.Create({
// @ts-ignore proto generated code is error.
data: {
...values,
},
// @ts-ignore proto generated code is error.
password: values.password ?? null,
});
}
/**
* 更新用户
*/
async function updateUser(id: number, values: object) {
const updateMask = makeUpdateMask(Object.keys(values ?? []));
return await service.Update({
// @ts-ignore proto generated code is error.
data: {
id,
...values,
},
// @ts-ignore proto generated code is error.
password: values.password ?? null,
// @ts-ignore proto generated code is error.
updateMask,
});
}
/**
* 删除用户
*/
async function deleteUser(id: number) {
return await service.Delete({ id });
}
function $reset() {}
return {
$reset,
listUser,
getUser,
createUser,
updateUser,
deleteUser,
};
});
最后,我们就可以在前端界面组件当中调用状态管理:
typescript
import { useUserStore } from '#/stores';
const userStore = useUserStore();
// 查询用户列表(直接调用生成的方法,自动带类型提示)
const fetchUserList = async () => {
const res = await userStore.List({
page: 1,
pageSize: 20, // 类型提示自动补全,错误类型会报错
});
console.log('用户列表:', res.items);
};
// 页面加载时调用
onMounted(() => {
fetchUserList();
});
此时你会发现:
- 输入参数时,VS Code 会自动提示可选字段(如 page、pageSize)
- 类型错误时(如传入字符串 "20" 而非数字 20),TS 会直接报错
- 响应结果自动带有类型定义,不用手动声明接口返回格式
四、核心优势:为什么推荐初学者用这套组合?
- 降低入门门槛 :
go-kratos-admin提供现成的 Admin 系统骨架,不用从零学微服务、权限设计、前端布局,新手也能快速出活 - 提升开发效率 :
protoc-gen-typescript-http自动生成接口代码,前后端只需维护 Protobuf 协议,不用手动写请求、不用反复联调接口参数 - 类型安全保障:TS 类型与后端 Protobuf 完全对齐,避免生产环境因类型不匹配导致的 bug
- 可扩展性强:后续新增接口时,只需修改 Protobuf 文件,重新执行生成命令,前端直接调用新方法,迭代速度极快
- 企业级特性内置:go-kratos-admin 自带多租户、数据权限、任务调度等企业级功能,后续项目升级不用重构架构
五、常见问题与避坑指南
1. 生成 TS 代码时提示 "google/api/annotations.proto not found":
解决方案:进入backend\api,执行buf dep update命令。
2. IDE中提示找不到 "google/api/annotations.proto":
解决方案:安装IDE的Buf插件即可。
2. 前端调用接口提示 401 未授权:
解决方案:登录后,从 localStorage 获取 token,在请求头中携带 Authorization 字段
3. Protobuf 文件修改后,TS 代码不更新:
解决方案:重新执行 make ts 生成命令,覆盖旧的 TS 文件即可
4. Docker 启动失败:
解决方案:检查 Docker 是否正在运行(sudo systemctl start docker),确保端口 8080、7788、5666 未被占用
六、总结与下一步学习建议
通过 go-kratos-admin + protoc-gen-typescript-http 的组合,我们用最少的代码搭建了一个带有用户管理功能、类型安全的 Admin 系统。对于初学者来说,这套组合的核心价值是 "避开重复劳动,专注核心业务"。
下一步可以尝试:
新增一个 "产品管理" 接口:在 backend/api/protos 下创建 proto 文件,定义 CRUD 接口,生成 TS 代码并在前端调用 自定义租户套餐:利用 go-kratos-admin 的租户管理功能,配置不同的权限套餐 部署到测试环境:通过make docker构建镜像,部署到服务器(支持 Docker Compose 一键部署)
如果你在使用过程中遇到问题,可以参考:
go-kratos-admin官方文档:项目根目录的README.md(支持中、英、日三种语言)protoc-gen-typescript-http示例:github.com/go-kratos/p...- 社区支持:添加微信
yang_lin_bo(备注go-kratos-admin),加入交流群
这套组合不仅适合初学者快速上手企业级项目,也是很多中小型公司的生产环境选择。赶紧动手试试,体验 "协议驱动开发" 带来的效率提升吧!