GoFrame - 模块化企业级工程化的 Go 基础开发框架

现如今,Go 语言越来越多地被用于后端服务开发中。但与已经十分成熟的 Java 相比较,Go 目前仍缺乏一个全面的服务应用开发框架,在进行开发时往往仍需要大量造轮子。GoFrame,其目的是为 Go 语言提供一个企业级的基础开发框架,提高开发效率和可靠性。

简介

GoFrame,是 johng 在 Gitee 上开源的 Go 基础开发框架,仓库位于 https://gitee.com/johng/gf,目前版本为 v2.0.6。

GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架。GoFrame 不是一款 WEB/RPC 框架,而是一款通用性的基础开发框架,是 Go 标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。

使用

GoFrame 具有以下特点:

  • 业内领先、工程完备
  • 模块化、松耦合设计
  • 组件丰富、开箱即用
  • 简洁易用、文档详尽
  • 接口化、高扩展性设计
  • 全链路跟踪特性
  • 全错误堆栈特性
  • 接口化的错误码支持
  • 稳健的工程设计规范
  • 更便捷强大的ORM组件
  • 便捷的开发工具、自动化代码生成
  • 支持OpenTelemetry可观测性标准
  • 自动化的接口文档生成,支持OpenAPIV3标准
  • 完善的本地中文化支持
  • 设计为团队及企业使用


在项目中使用 GoFrame,使用 go get 直接安装,要求 Go >= 1.15:

go get -u -v github.com/gogf/gf/v2

推荐使用 go.mod:

require github.com/gogf/gf/v2 latest


GoFrame 架构如下:

GoFrame 使用 CLI 工具来构建服务,首先安装 GoFrame CLI 工具:

go install github.com/gogf/gf/cmd/gf/v2

然后使用 init 命令创建一个指定名称的项目:

$ gf init hello

输出:

initializing...
initialization done!
you can now run 'cd hello && gf run main.go' to start your journey, enjoy!

我们就能得到一个基本的 Go 服务项目。可以构建一个最简单的 API 服务:

package v1

import (
	"github.com/gogf/gf-demo-user/v2/internal/model/entity"
	"github.com/gogf/gf/v2/frame/g"
)

type UserProfileReq struct {
	g.Meta `path:"/user/profile" method:"get" tags:"UserService" summary:"Get the profile of current user"`
}
type UserProfileRes struct {
	*entity.User
}

type UserSignUpReq struct {
	g.Meta    `path:"/user/sign-up" method:"post" tags:"UserService" summary:"Sign up a new user account"`
	Passport  string `v:"required|length:6,16"`
	Password  string `v:"required|length:6,16"`
	Password2 string `v:"required|length:6,16|same:Password"`
	Nickname  string
}
type UserSignUpRes struct{}

type UserSignInReq struct {
	g.Meta   `path:"/user/sign-in" method:"post" tags:"UserService" summary:"Sign in with exist account"`
	Passport string `v:"required"`
	Password string `v:"required"`
}
type UserSignInRes struct{}

type UserCheckPassportReq struct {
	g.Meta   `path:"/user/check-passport" method:"post" tags:"UserService" summary:"Check passport available"`
	Passport string `v:"required"`
}
type UserCheckPassportRes struct{}

type UserCheckNickNameReq struct {
	g.Meta   `path:"/user/check-passport" method:"post" tags:"UserService" summary:"Check nickname available"`
	Nickname string `v:"required"`
}
type UserCheckNickNameRes struct{}

type UserIsSignedInReq struct {
	g.Meta `path:"/user/is-signed-in" method:"post" tags:"UserService" summary:"Check current user is already signed-in"`
}
type UserIsSignedInRes struct {
	OK bool `dc:"True if current user is signed in; or else false"`
}

type UserSignOutReq struct {
	g.Meta `path:"/user/sign-out" method:"post" tags:"UserService" summary:"Sign out current user"`
}
type UserSignOutRes struct{}

除了用于构建服务,GoFrame 还提供了大量用于库开发的模块,包括:

  • 数据结构:字典类型、数组类型、集合类型等
  • 系统相关:定时器、内存锁、定时任务、缓存管理等
  • 文本处理:字符串处理、正则表达式
  • 编码解码:二进制、HTML、XML、YAML 等
  • 数据管理:数据库 ORM、Redis 客户端
  • 加密解密:MD5、AES、DES 等
  • 实用工具:随机数、唯一数、类型转换、数据校验等
  • 单元测试:单元测试
  • 错误管理:错误处理、错误码接口
  • 功能调试
  • I18N组件

如定时任务 gcron:

import "github.com/gogf/gf/v2/os/gcron"
gcron.AddSingleton(ctx, "* * * * * *", func(ctx context.Context) {
	glog.Print(context.TODO(), "doing")
	time.Sleep(2 * time.Second)
})
select {}

数据库 ORM:

db, err := gdb.New(gdb.ConfigNode{
	Link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test",
})


总结

GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架,是 Go 标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队,不妨考虑应用到实践中。

原文链接:,转发请注明来源!