手把手教你go frame 2.x版本搭建微服务
作者:java叶新东
Go Frame介绍
GoFrame 是一款模块化、高性能的Go 语言开发框架。无论是组件库、单体服务、微服务都可以使用GoFrame来编写;GoFrame 提供开箱即用、丰富强大的基础组件库;
可根据代码结构自动生成清晰、规范的接口文档,节省人工编写时间,提高文档与代码的同步性和准确性。
高效便捷的代码生成工具链,极大提高开发效率,减少重复性工作,同时保证代码的规范性和一致性。
环境准备
- 搭建go环境变量,我这里使用的目前最新版本: 1.26.1
- go frame 版本 2.10.0
- Postman、Apipost 7.2.1 以上版本(任选其一即可,需要支持grpc测试功能)
- Protobuf 下载地址:https://github.com/protocolbuffers/protobuf/releases
- etcd 作为注册中心使用
- mysql 5.7 持久化存储能力
安装环境
安装grpc
# 生成数据模型代码 go install google.golang.org/protobuf/cmd/protoc-gen-go@latest # 生成接口代码 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
安装 go frame cli工具
go install github.com/gogf/gf/cmd/gf/v2@latest
创建数据库
CREATE DATABASE `user`; CREATE DATABASE `word`;
安装项目依赖
安装微服务组件
安装grpcx组件,让GoFrame支持微服务开发。
go get -u github.com/gogf/gf/contrib/rpc/grpcx/v2
安装数据库驱动
和单体服务一样,也需要安装对应的数据库驱动,这里演示的是MySQL。
go get -u github.com/gogf/gf/contrib/drivers/mysql/v2
安装etcd组件
安装etcd组件,提供服务注册功能。
go get -u github.com/gogf/gf/contrib/registry/etcd/v2
搭建
搭建微服务文档:https://goframe.org/course/proxima-book
GoFrame v2.x+ 最新官方标准目录结构
这是 gf cli 自动生成的纯原版结构,无任何旧版内容,企业生产环境唯一标准结构,我给你整理成最清晰、最实用、能直接照着开发的版本。
一、完整标准目录树
你的项目/ ├── api/ # 对外 API 契约(入参/出参/路由定义) ├── hack/ # 框架工具链配置(gf 命令依赖) ├── internal/ # 项目核心私有代码(外部不可访问) │ ├── cmd/ # 服务启动入口 │ ├── consts/ # 全局常量(错误码、状态、配置key) │ ├── controller/ # HTTP 请求控制器 │ ├── dao/ # 数据库操作层 │ ├── logic/ # 业务逻辑实现层 │ ├── model/ # 数据模型 │ │ ├── do/ # 数据操作对象(业务层用) │ │ └── entity/ # 数据库表映射实体 │ ├── packed/ # 资源打包文件(自动生成) │ └── service/ # 服务接口定义 ├── manifest/ # 部署&配置文件 │ ├── config/ # 多环境配置(dev/prod) │ ├── deploy/ # 部署脚本(k8s/pm2) │ └── docker/ # Docker 构建文件 ├── resource/ # 静态资源(模板、配置、静态文件) ├── utility/ # 项目通用工具函数 ├── go.mod # Go 模块依赖 ├── go.sum # 依赖版本锁定 ├── main.go # 项目唯一启动入口 └── Makefile # 构建命令快捷方式
二、每个目录 + 文件 官方作用(纯新版)
1. 根目录文件
main.go
项目唯一启动入口。
- 只做一件事:调用
internal/cmd启动服务 - 无业务代码
go.mod/go.sum
Go 模块依赖管理,记录 GoFrame 及第三方库版本。
Makefile
快捷构建命令:
make run make build make gen
不用记长命令。
2.api/—— 对外 API 契约(最重要)
GoFrame v2 核心设计:接口优先
- 所有接口入参、出参、路由、请求方法、参数校验全部在这里定义
- 控制器、文档、校验 全部自动生成
- 结构示例:
api/
├── user/
│ └── v1/
│ └── user.go
└── order/
└── v1/
└── order.go- 不写业务逻辑,只定义接口协议
3.hack/—— 框架工具链配置
gf 命令自动生成和构建依赖的配置
- 不用手动修改
- 包含:代码生成模板、构建配置、自定义命令
文件:
hack/ ├── config.yaml ├── hack.mk └── hack-cli.mk
4.internal/—— 项目核心(Go 强制私有,外部无法引用)
这是所有业务代码存放地,最安全、最标准。
🔹internal/cmd/—— 服务启动入口
项目真正的启动逻辑:
- 初始化配置
- 注册路由
- 启动 HTTP 服务
- 支持多命令(http / rpc / cron)
🔹internal/consts/—— 全局常量
统一管理:
- 错误码
- 业务状态(1=启用,2=禁用)
- 配置 Key
- 全局固定值
避免魔法值,规范必备。
🔹internal/controller/—— 控制器
请求入口层
- 接收 HTTP 请求
- 自动参数校验
- 调用 service
- 返回响应
- 不写任何业务逻辑
- 可通过
gf gen ctrl自动生成
🔹internal/service/—— 服务接口
定义业务接口,给 controller 调用。
- 接口定义
- 解耦 controller 和 logic
- 便于测试、替换实现
🔹internal/logic/—— 业务逻辑(核心)
80% 业务代码都在这里
- 业务流程
- 数据计算
- 调用 dao
- 调用第三方服务
- 事务控制
🔹internal/dao/—— 数据库操作层
只做数据库 CRUD
- 自动生成(
gf gen dao) - 无业务逻辑
- 安全、规范、统一
🔹internal/model/—— 数据模型(v2 新标准)
分为两个绝对清晰的部分:
model/entity/
- 数据库表结构一一映射
- 自动生成
- 不允许手动修改
model/do/
- Data Object
- 业务层数据传输对象
- 用于 logic / service 之间数据传递
- 可自由扩展字段
🔹internal/packed/
资源打包目录
gf pack自动生成- 把配置、静态文件打包进二进制
- 支持单文件部署
5.manifest/—— 部署&配置
manifest/config/
多环境配置:
- config.yaml
- config.dev.yaml
- config.prod.yaml
包含:server、database、redis、logger、jwt 等。
manifest/deploy/
K8s、Nginx、systemd 部署文件。
manifest/docker/
Dockerfile、docker-compose 构建配置。
6.resource/—— 静态资源
存放:
- 模板文件
- 静态文件(html/css/js)
- 配置文件
- 证书
7.utility/—— 工具函数
项目内部通用工具:
- 字符串处理
- 加密
- 时间工具
- 自定义公共函数
三、GoFrame v2 标准请求流程(必背)
客户端请求 → 控制器(controller) → 服务接口(service) → 业务逻辑(logic) → 数据库操作(dao) → 数据模型(entity/do)
一句话分层记忆:
- controller:收请求
- service:定接口
- logic:写业务
- dao:操作库
- api:定义参数
四、最常用的 4 条命令(新版标准)
gf run main.go # 启动项目 gf gen ctrl # 根据 api 自动生成控制器 gf gen dao # 根据数据库自动生成 dao/entity gf swagger # 生成接口文档
五、这个结构为什么是官方最佳?
- internal 强制私有:业务代码绝对安全
- api 优先:接口定义统一,自动校验、自动文档
- 彻底分层:controller/service/logic/dao 标准四层架构
- 自动生成:90% 重复代码不用手写
- 多环境天然支持:开发/测试/生产配置隔离
- 部署标准化:docker / k8s 直接用
缺点
缺少以下微服务组件
- 熔断器
- 分布式锁
- 分布式事务
到此这篇关于手把手教你go frame 2.x版本搭建微服务的文章就介绍到这了,更多相关go frame 2.x搭建微服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
