函数注册方式是最简单且最灵活的的路由注册方式,注册的服务可以是一个实例化对象的方法地址,也可以是一个包方法地址。服务需要的数据可以通过模块内部变量形式或者对象内部变量形式进行管理,开发者可根据实际情况进行灵活控制。相关方法:
func (s *Server) BindHandler(pattern string, handler interface{})
我们可以直接通过BindHandler
方法完成回调函数的注册,在框架的开发手册中很多地方都使用了回调函数注册的方式来做演示,因为这种注册方式比较简单。
我们来看一个简单的示例:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
r.Response.Write("哈喽世界!")
})
s.SetPort(8199)
s.Run()
}
执行后,我们访问 http://127.0.0.1:8199 可以看到我们熟悉的内容。
注册的路由函数可以是一个包方法,例如:
package main
import (
"github.com/gogf/gf/v2/container/gtype"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
var (
total = gtype.NewInt()
)
func Total(r *ghttp.Request) {
r.Response.Write("total:", total.Add(1))
}
func main() {
s := g.Server()
s.BindHandler("/total", Total)
s.SetPort(8199)
s.Run()
}
在该示例中,我们通过包方法的形式来注册路由。该方法返回总共访问的次数,由于涉及到并发安全,因此total
变量使用了gtype.Int
并发安全类型。执行后,当我们不停访问 http://127.0.0.1:8199/total
时,可以看到返回的数值不停递增。
注册的路由函数可以是一个对象的方法,例如:
package main
import (
"github.com/gogf/gf/v2/container/gtype"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
type Controller struct {
total *gtype.Int
}
func (c *Controller) Total(r *ghttp.Request) {
r.Response.Write("total:", c.total.Add(1))
}
func main() {
s := g.Server()
c := &Controller{
total: gtype.NewInt(),
}
s.BindHandler("/total", c.Total)
s.SetPort(8199)
s.Run()
}
该示例与示例1的实现的效果一致,但我们使用了对象来封装业务逻辑所需的变量,使用回调函数注册来灵活注册对应的对象方法。
从GoFramev1.11版本开始,Request对象提供了对客户端提交的JSON/XML数据格式的原生支持,为开发者提供了更便捷的数...
相关方法:func (r *Response) WriteJson(content interface{}) errorfunc (r *Response) WriteJsonExit(content interface{}) e...
有时,我们要为整个应用添加依赖项。通过与定义路径装饰器依赖项类似的方式,可以把依赖项添加至整个FastAPI应用。这样一来,就...
你可以向FastAPI应用添加中间件."中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作.它接收...
即插视图可以像常规函数一样用route()或更好的add_url_rule()附加到应用中。然而当你附加它时,你必须 提供 HTTP 方法的名称。为...