函数注册
函数注册 方式是最简单且最灵活的的路由注册方式,注册的路由 handler
可以是一个实例化 对象的方法地址,也可以是一个 包方法地址。相关方法:
func (s *Server) BindHandler(pattern string, handler interface{})
使用示例
Hello World
我们来看一个简单的示例:
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 可以看到我们熟悉的内容。
包方法注册
注册的路由函数 handler
参数可以是一个包方法,例如:
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 时,可以看到返回的数值不停递增。
对象方法注册
注册的路由函数 handler
参数可以是一个对象的方法,例如:
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的实现的效果一致,但我们使用了对象来封装业务逻辑所需的变量,使用路由函数注册来灵活注册对应的对象方法。