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+ 版本:
go version创建项目
mkdir myappcd myappgo mod init myapp安装 GoFrame
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):
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")
// 转换为 Mapgconv.Map(jsonStr)JSON 处理 (gjson)
import "github.com/gogf/gf/v2/encoding/gjson"
// 解析 JSONj, _ := gjson.DecodeToJson(jsonBytes)
// 获取值name := j.Get("user.name").String()age := j.Get("user.age").Int()
// 转换为 Mapdata := j.Map()并发 Map (gmap)
import "github.com/gogf/gf/v2/container/gmap"
// 创建线程安全 Mapm := 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 基础教程:
- GoFrame 介绍
- GoFrame 环境搭建
- GoFrame 的 Web 服务介绍
- GoFrame 请求与响应
- GoFrame 路由注册
- GoFrame 中间件
- GoFrame 的 HTTP 客户端
- GoFrame 配置管理
- GoFrame 日志管理
- GoFrame 数据库
- GoFrame Redis
- GoFrame 常用工具
视频教程
Bilibili 教程:GoFrame 基础教程 - 快速入门
交流方式
- QQ 交流群: 479196644
总结
GoFrame 作为一款成熟的 Go Web 框架,提供了从基础 HTTP 服务到数据库操作、缓存管理、日志记录等全方位的支持。通过模块化的设计和丰富的工具库,开发者可以快速搭建高性能的 Web 应用。
本文介绍了 GoFrame 的核心功能和使用方法,更多详细内容可以参考 gfstudy 项目的完整教程和示例代码。
GoFrame 基础教程 - Go 语言 Web 开发快速入门
https://www.jflyfox.com/posts/gfstudy/