• 分组路由
  • 基本使用
  • 批量注册

    分组路由

    gf框架当然也支持分组路由的注册方式,可以给分组路由指定一个prefix前缀(可选),在该分组下的所有路由注册都将注册在该路由前缀下。

    接口文档

    1. func (s *Server) Group(prefix...string) *RouterGroup
    2. func (d *Domain) Group(prefix...string) *RouterGroup
    3. func (g *RouterGroup) ALL(pattern string, object interface{}, params...interface{})
    4. func (g *RouterGroup) GET(pattern string, object interface{}, params...interface{})
    5. func (g *RouterGroup) PUT(pattern string, object interface{}, params...interface{})
    6. func (g *RouterGroup) POST(pattern string, object interface{}, params...interface{})
    7. func (g *RouterGroup) DELETE(pattern string, object interface{}, params...interface{})
    8. func (g *RouterGroup) PATCH(pattern string, object interface{}, params...interface{})
    9. func (g *RouterGroup) HEAD(pattern string, object interface{}, params...interface{})
    10. func (g *RouterGroup) CONNECT(pattern string, object interface{}, params...interface{})
    11. func (g *RouterGroup) OPTIONS(pattern string, object interface{}, params...interface{})
    12. func (g *RouterGroup) TRACE(pattern string, object interface{}, params...interface{})
    13. // REST路由注册
    14. func (g *RouterGroup) REST(pattern string, object interface{})
    15. // 执行分组路由批量绑定
    16. func (g *RouterGroup) Bind(items []GroupItem)

    其中:

    1. Group方法用户创建一个分组路由对象,并且支持在指定域名对象上创建;
    2. Bind方法用于批量路由注册,每一个路由注册项为Slice类型的参数,且参数数量应该>=3,具体使用请见后续示例;
    3. REST方法用户注册RESTful风格的路由,需给定一个执行对象或者控制器对象;
    4. ALL方法用于注册所有的HTTP Method到指定的函数/对象/控制器上;
    5. 其他以HTTP Method命名的方法用以绑定指定的HTTP Method路由;

    基本使用

    1. package main
    2. import (
    3. "github.com/gogf/gf/g"
    4. "github.com/gogf/gf/g/net/ghttp"
    5. )
    6. type Object struct {}
    7. func (o *Object) Show(r *ghttp.Request) {
    8. r.Response.Writeln("Object Show")
    9. }
    10. func (o *Object) Delete(r *ghttp.Request) {
    11. r.Response.Writeln("Object REST Delete")
    12. }
    13. func Handler(r *ghttp.Request) {
    14. r.Response.Writeln("Handler")
    15. }
    16. func HookHandler(r *ghttp.Request) {
    17. r.Response.Writeln("Hook Handler")
    18. }
    19. func main() {
    20. s := g.Server()
    21. obj := new(Object)
    22. group := s.Group("/api")
    23. group.ALL ("*", HookHandler, ghttp.HOOK_BEFORE_SERVE)
    24. group.ALL ("/handler", Handler)
    25. group.ALL ("/obj", obj)
    26. group.GET ("/obj/showit", obj, "Show")
    27. group.REST("/obj/rest", obj)
    28. s.SetPort(8199)
    29. s.Run()
    30. }

    执行后,注册的路由表如下:

    1. SERVER | ADDRESS | DOMAIN | METHOD | P | ROUTE | HANDLER | HOOK
    2. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|
    3. default | :8199 | default | ALL | 2 | /api/* | main.HookHandler | BeforeServe
    4. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|
    5. default | :8199 | default | GET | 3 | /api/obj/showit | main.(*Object).Show |
    6. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|
    7. default | :8199 | default | ALL | 3 | /api/obj/delete | main.(*Object).Delete |
    8. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|
    9. default | :8199 | default | DELETE | 3 | /api/obj/rest | main.(*Object).Delete |
    10. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|
    11. default | :8199 | default | ALL | 3 | /api/obj/show | main.(*Object).Show |
    12. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|
    13. default | :8199 | default | ALL | 2 | /api/handler | main.Handler |
    14. |---------|---------|---------|--------|---|------------------|-------------------------|-------------|

    批量注册

    gf框架的分组路由同时也支持批量的路由注册方式。

    1. package main
    2. import (
    3. "github.com/gogf/gf/g"
    4. "github.com/gogf/gf/g/net/ghttp"
    5. )
    6. type Object struct {}
    7. func (o *Object) Show(r *ghttp.Request) {
    8. r.Response.Writeln("Object Show")
    9. }
    10. func (o *Object) Delete(r *ghttp.Request) {
    11. r.Response.Writeln("Object REST Delete")
    12. }
    13. func Handler(r *ghttp.Request) {
    14. r.Response.Writeln("Handler")
    15. }
    16. func HookHandler(r *ghttp.Request) {
    17. r.Response.Writeln("Hook Handler")
    18. }
    19. func main() {
    20. s := g.Server()
    21. obj := new(Object)
    22. s.Group("/api").Bind([]ghttp.GroupItem{
    23. {"ALL", "*", HookHandler, ghttp.HOOK_BEFORE_SERVE},
    24. {"ALL", "/handler", Handler},
    25. {"ALL", "/obj", obj},
    26. {"GET", "/obj/showit", obj, "Show"},
    27. {"REST", "/obj/rest", obj},
    28. })
    29. s.SetPort(8199)
    30. s.Run()
    31. }

    执行后,注册的路由表和前一个示例一致。