路由注册基础:函数注册、对象注册与 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 为准。

笔记加载中…