初学者入门:用 go-kratos-admin + protoc-gen-typescript-http 快速搭建企业级 Admin 系统

初学者入门:用 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 接口(如CreateUserRequestUser...)
  • 自动封装的服务客户端接口(createUserServiceClient
  • 可直接调用的接口方法(ListGetCreateUpdate...)
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 会直接报错
  • 响应结果自动带有类型定义,不用手动声明接口返回格式

四、核心优势:为什么推荐初学者用这套组合?

  1. 降低入门门槛go-kratos-admin 提供现成的 Admin 系统骨架,不用从零学微服务、权限设计、前端布局,新手也能快速出活
  2. 提升开发效率protoc-gen-typescript-http 自动生成接口代码,前后端只需维护 Protobuf 协议,不用手动写请求、不用反复联调接口参数
  3. 类型安全保障:TS 类型与后端 Protobuf 完全对齐,避免生产环境因类型不匹配导致的 bug
  4. 可扩展性强:后续新增接口时,只需修改 Protobuf 文件,重新执行生成命令,前端直接调用新方法,迭代速度极快
  5. 企业级特性内置: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),加入交流群

这套组合不仅适合初学者快速上手企业级项目,也是很多中小型公司的生产环境选择。赶紧动手试试,体验 "协议驱动开发" 带来的效率提升吧!

相关推荐
用户21411832636022 小时前
手把手教你用Claude制作专属PPT生成器-从模板学习到自动生成全流程实战
后端
计算机毕设匠心工作室4 小时前
【python大数据毕设实战】全面皮肤病症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
摆烂工程师4 小时前
2025年12月最新的 Google AI One Pro 1年会员教育认证通关指南
前端·后端·ai编程
qq_12498707535 小时前
基于SpringBoot+vue的小黄蜂外卖平台(源码+论文+部署+安装)
java·开发语言·vue.js·spring boot·后端·mysql·毕业设计
代码与野兽5 小时前
AI交易,怎么让LLM自己挑选数据源?
前端·javascript·后端
天天摸鱼的java工程师5 小时前
JDK 25 到底更新了什么?这篇全景式解读带你全面掌握
java·后端
非鱼feiyu5 小时前
自关联数据表查询优化实践:以 Django + 递归 CTE 构建树结构为例
数据库·后端·django
零日失眠者5 小时前
这5个Python库一旦掌握就离不开
后端·python
幌才_loong5 小时前
.NET8 × Redis 实战宝典:从配置到落地,搞定高并发缓存就这篇!
后端·.net