手把手教你go frame 2.x版本搭建微服务

 更新时间:2026年05月20日 14:25:33   作者:java叶新东  
GoFrame是一个模块化、高性能的Go语言开发框架,提供丰富的基础组件库,支持自动生成接口文档,代码生成工具链提高开发效率,本文档详细介绍了GoFrame的安装、配置、目录结构及请求流程,感兴趣的可以了解一下

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                    # 生成接口文档

五、这个结构为什么是官方最佳?

  1. internal 强制私有:业务代码绝对安全
  2. api 优先:接口定义统一,自动校验、自动文档
  3. 彻底分层:controller/service/logic/dao 标准四层架构
  4. 自动生成:90% 重复代码不用手写
  5. 多环境天然支持:开发/测试/生产配置隔离
  6. 部署标准化:docker / k8s 直接用

缺点

缺少以下微服务组件

  • 熔断器
  • 分布式锁
  • 分布式事务

到此这篇关于手把手教你go frame 2.x版本搭建微服务的文章就介绍到这了,更多相关go frame 2.x搭建微服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何利用Golang解析读取Mysql备份文件

    如何利用Golang解析读取Mysql备份文件

    这篇文章主要给大家介绍了关于如何利用Golang解析读取Mysql备份文件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Golang具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • 修改并编译golang源码的操作步骤

    修改并编译golang源码的操作步骤

    这篇文章主要介绍了修改并编译golang源码的操作步骤,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • Golang中的错误处理的示例详解

    Golang中的错误处理的示例详解

    这篇文章主要为大家详细介绍了Golang中的错误处理的相关资料,文章中的示例代码讲解详细,对我们学习Golang有一定帮助,需要的可以参考一下
    2022-12-12
  • golang 连接mongoDB的方法示例

    golang 连接mongoDB的方法示例

    这篇文章主要介绍了golang 连接mongoDB的方法示例,详细的介绍了golang的基础知识和连接mongoDB的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Go error的使用方式详解

    Go error的使用方式详解

    当我们需要在Go项目中设计error,就不得不先知道Go error几种常用方法,今天通过本文给大家介绍Go error的使用方式详解,感兴趣的朋友一起看看吧
    2022-05-05
  • Go语言实现切片增删改查的示例代码

    Go语言实现切片增删改查的示例代码

    这篇文章主要为大家详细介绍了Go语言中切片的使用(增删改查),文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
    2022-04-04
  • Go语言之使用pprof工具查找goroutine(协程)泄漏

    Go语言之使用pprof工具查找goroutine(协程)泄漏

    这篇文章主要介绍了Go语言之使用pprof工具查找goroutine(协程)泄漏,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 深入探索Go语言中的高效数据结构堆

    深入探索Go语言中的高效数据结构堆

    堆,作为一种基本的数据结构,以其在优先队列和排序算法中提供高效解决方案的能力而闻名。在本文中,我们将深入探讨堆的内部工作原理,包括其特性、实现细节以及在现代编程中的应用
    2008-06-06
  • Go语言实现猜谜小游戏

    Go语言实现猜谜小游戏

    这篇文章主要为大家介绍了Go语言实现猜谜小游戏示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • golang跳转语句goto,break,continue的使用及区别说明

    golang跳转语句goto,break,continue的使用及区别说明

    这篇文章主要介绍了golang跳转语句goto,break,continue的使用及区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论