路由注册基础:函数注册、对象注册与 BindHandler 概念
引言
路由把"URL + HTTP 方法"映射到处理逻辑。GoFrame v2 提供三类路由注册方式:函数注册、对象注册、规范路由(后续章节)。本章先打基础:BindHandler 与函数注册、对象注册的概念。
概念
- 函数注册:把一个
func(r *ghttp.Request)类型的处理函数绑定到路径,最直接、最灵活。 - 对象注册:把结构体的方法批量注册为路由,适合按"资源"组织接口;方法名到访问路径有默认映射规则,新项目更推荐用规范路由代替对象注册。
- 请求与响应:处理函数内用
r读参数(后续章节),用r.Response写回,常用Write(文本)与WriteJson(JSON)。
代码示例
函数注册(BindHandler 与分组两种写法等价):
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func Hello(r *ghttp.Request) {
r.Response.Write("hello " + r.Get("name").String())
}
func main() {
s := g.Server()
// 方式一:直接绑定处理函数
s.BindHandler("/hello", Hello)
// 方式二:在分组上按方法注册(更推荐,可限定 GET/POST 等)
s.Group("/api", func(group *ghttp.RouterGroup) {
group.GET("/ping", func(r *ghttp.Request) {
r.Response.WriteJson(g.Map{"message": "pong"})
})
group.POST("/echo", func(r *ghttp.Request) {
r.Response.Write(r.Get("content"))
})
})
s.SetPort(8000)
s.Run()
}
对象注册的概念示例(方法名与路径的映射细节以官方文档为准):
type UserApi struct{}
// 对象方法:一个方法对应一个处理逻辑
func (a *UserApi) Hello(r *ghttp.Request) {
r.Response.Write("user hello")
}
func main() {
s := g.Server()
// 将对象方法批量注册到 /user 前缀下
s.BindObject("/user", new(UserApi))
s.Run()
}
注意点
BindHandler对路径上注册的函数,默认匹配规则与请求方法限制见官方文档路由注册章节;需要精确控制 GET/POST 时优先用group.GET/group.POST。- 一个处理函数就是一个
*ghttp.Request参数的普通函数,方便单独测试与复用。 - 对象注册便于归类,但"方法名即路由名"的约定需要团队熟悉;从 v2 开始官方更推荐规范路由。
- 多个路由模式冲突、注册重复时,服务启动阶段会报错,注意阅读启动日志。
小结
函数注册简单直接,对象注册批量组织;二者之上还有更强大的规范路由。下一章介绍路由分组与中间件,让路由具备"前缀、方法、公共逻辑"的组织能力。注册规则的完整说明以官方文档 goframe.org 为准。