1117 字
6 分钟
GoFrame 基础教程 - Go 语言 Web 开发快速入门

GoFrame 基础教程 - Go 语言 Web 开发快速入门#

GoFrame 是一款 Go 语言开发的模块化、高性能 Web 开发框架,提供了丰富的功能模块和工具,帮助开发者快速构建 Web 应用。

一、GoFrame 简介#

GoFrame 提供了完整的 Web 开发解决方案,包括:

  • Web 服务:HTTP 服务器、路由、中间件
  • 请求与响应:参数解析、数据验证、响应格式化
  • 配置管理:多环境配置、热加载
  • 日志管理:结构化日志、日志级别控制
  • 数据库:MySQL、PostgreSQL 等关系型数据库支持
  • 缓存:Redis 连接与操作
  • 工具库:字符串处理、JSON 解析、类型转换等

二、环境搭建#

安装 Go#

确保已安装 Go 1.18+ 版本:

Terminal window
go version

创建项目#

Terminal window
mkdir myapp
cd myapp
go mod init myapp

安装 GoFrame#

Terminal window
go get github.com/gogf/gf/v2

三、Web 服务介绍#

基础 HTTP 服务器#

package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *g.Request) {
r.Response.Write("Hello World!")
})
s.Run()
}

路由注册#

GoFrame 支持多种路由注册方式:

// 基础路由
s.BindHandler("/user", GetUser)
// RESTful 风格
s.BindHandler("GET:/user/list", ListUsers)
s.BindHandler("POST:/user/create", CreateUser)
s.BindHandler("PUT:/user/update", UpdateUser)
s.BindHandler("DELETE:/user/delete", DeleteUser)
// 带参数路由
s.BindHandler("/user/:id", GetUserByID)
s.BindHandler("/article/{category}/{id}", GetArticle)

四、请求与响应#

获取请求参数#

func Handler(r *g.Request) {
// 获取查询参数
id := r.Get("id").Int()
name := r.Get("name").String()
// 获取 POST 参数
data := r.Parse()
// 获取 JSON 请求体
var user User
r.Parse(&user)
}

响应数据#

func Handler(r *g.Request) {
// JSON 响应
r.Response.WriteJson(g.Map{
"code": 0,
"message": "success",
"data": result,
})
// 重定向
r.Response.Redirect("/new-path")
// 设置 Header
r.Response.Header().Set("Content-Type", "application/json")
}

五、中间件#

中间件用于处理请求前后的通用逻辑,如认证、日志、CORS 等:

// 注册中间件
s.Use(CORS, Auth, Logger)
// 中间件函数
func CORS(r *g.Request) {
r.Response.CORSDefault()
r.ExitAll()
}
func Auth(r *g.Request) {
token := r.Get("token").String()
if !validateToken(token) {
r.Response.WriteJson(g.Map{
"code": 401,
"message": "unauthorized",
})
r.ExitAll()
}
r.ExitAll()
}

六、配置管理#

配置文件格式#

GoFrame 支持多种配置文件格式(YAML、TOML、JSON、INI):

config.yaml
server:
address: ":8080"
serverRoot: "./public"
database:
default:
link: "mysql:user:pass@tcp(127.0.0.1:3306)/dbname"
debug: true
redis:
default:
address: "127.0.0.1:6379"
db: 0

读取配置#

import "github.com/gogf/gf/v2/frame/g"
// 读取配置
address := g.Cfg().Get(context.Background(), "server.address").String()
dbLink := g.Cfg().Get(context.Background(), "database.default.link").String()

七、日志管理#

import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
ctx := gctx.New()
// 不同级别日志
g.Log().Info(ctx, "info message")
g.Log().Debug(ctx, "debug message")
g.Log().Warning(ctx, "warning message")
g.Log().Error(ctx, "error message")
// 带字段日志
g.Log().Infof(ctx, "user %s logged in", username)
}

八、数据库操作#

MySQL 连接#

import (
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
)
// 查询
func GetUser(id int) (*gdb.Record, error) {
result, err := g.DB().Table("user").Where("id", id).One()
if err != nil {
return nil, err
}
return result, nil
}
// 插入
func InsertUser(data gdb.Map) (int64, error) {
result, err := g.DB().Table("user").Data(data).Insert()
if err != nil {
return 0, err
}
return result.LastInsertId()
}
// 更新
func UpdateUser(id int, data gdb.Map) (int64, error) {
result, err := g.DB().Table("user").Data(data).Where("id", id).Update()
if err != nil {
return 0, err
}
return result.RowsAffected()
}
// 删除
func DeleteUser(id int) (int64, error) {
result, err := g.DB().Table("user").Where("id", id).Delete()
if err != nil {
return 0, err
}
return result.RowsAffected()
}

九、Redis 操作#

import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
ctx := gctx.New()
// 设置
g.Redis().Set(ctx, "key", "value")
// 获取
value, _ := g.Redis().Get(ctx, "key")
// 删除
g.Redis().Del(ctx, "key")
// 哈希操作
g.Redis().HSet(ctx, "user:1", "name", "John")
g.Redis().HGet(ctx, "user:1", "name")
// 列表操作
g.Redis().LPush(ctx, "list", "item1", "item2")
g.Redis().LRange(ctx, "list", 0, -1)
}

十、常用工具#

GoFrame 提供了丰富的工具函数:

字符串处理 (gstr)#

import "github.com/gogf/gf/v2/util/gstr"
// 包含判断
gstr.Contains("hello world", "world")
// 分割
gstr.Split("a,b,c", ",")
// 替换
gstr.Replace("hello world", "world", "Go")
// 大小写转换
gstr.ToLower("HELLO")
gstr.ToUpper("hello")

类型转换 (gconv)#

import "github.com/gogf/gf/v2/util/gconv"
// 转换为字符串
gconv.String(123)
// 转换为整数
gconv.Int("456")
// 转换为浮点数
gconv.Float64("3.14")
// 转换为切片
gconv.Ints("1,2,3")
// 转换为 Map
gconv.Map(jsonStr)

JSON 处理 (gjson)#

import "github.com/gogf/gf/v2/encoding/gjson"
// 解析 JSON
j, _ := gjson.DecodeToJson(jsonBytes)
// 获取值
name := j.Get("user.name").String()
age := j.Get("user.age").Int()
// 转换为 Map
data := j.Map()

并发 Map (gmap)#

import "github.com/gogf/gf/v2/container/gmap"
// 创建线程安全 Map
m := gmap.New()
// 设置
m.Set("key", "value")
// 获取
value := m.Get("key")
// 删除
m.Remove("key")

MD5 加密#

import "github.com/gogf/gf/v2/crypto/gmd5"
// MD5 加密
hash := gmd5.EncryptString("password")

十一、项目资源#

代码仓库#

教程目录#

gfstudy 项目提供了完整的 GoFrame 基础教程:

  1. GoFrame 介绍
  2. GoFrame 环境搭建
  3. GoFrame 的 Web 服务介绍
  4. GoFrame 请求与响应
  5. GoFrame 路由注册
  6. GoFrame 中间件
  7. GoFrame 的 HTTP 客户端
  8. GoFrame 配置管理
  9. GoFrame 日志管理
  10. GoFrame 数据库
  11. GoFrame Redis
  12. GoFrame 常用工具

视频教程#

Bilibili 教程:GoFrame 基础教程 - 快速入门

交流方式#

  • QQ 交流群: 479196644

总结#

GoFrame 作为一款成熟的 Go Web 框架,提供了从基础 HTTP 服务到数据库操作、缓存管理、日志记录等全方位的支持。通过模块化的设计和丰富的工具库,开发者可以快速搭建高性能的 Web 应用。

本文介绍了 GoFrame 的核心功能和使用方法,更多详细内容可以参考 gfstudy 项目的完整教程和示例代码。

GoFrame 基础教程 - Go 语言 Web 开发快速入门
https://www.jflyfox.com/posts/gfstudy/
作者
FLY的狐狸
发布于
2025-09-11
许可协议
CC BY-NC-SA 4.0