goframe 路由

优先规则

层次深的优先

/a/b/*any #优先 3层 > 2层
/a/b # 2层

静态优先

/a/b/update # 优先
/a/b/*any # 最后
/a/b/{field}.html # 次优先
路由约束

method:path@domain 约束请求方式,路径,域名

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	// 如果要全部绑定域名,使用带域名的Server进行注册
	// g.Server().Domain("www.xrx.com")
	// 该路由规则仅会在GET请求下有效
	s.BindHandler("GET:/book/{field}.html", func(r *ghttp.Request) {
		r.Response.WriteJson(r.Router)
	})
	// 该路由规则仅会在GET请求及xrx.com域名下有效
	s.BindHandler("GET:/book/:id/info@www.xrx.com", func(r *ghttp.Request) {
		r.Response.WriteJson(r.Router)
	})
	// 该路由规则仅会在DELETE请求下有效
	s.BindHandler("DELETE:/book/{id}", func(r *ghttp.Request) {
		r.Response.WriteJson(r.Router)
	})
	s.SetPort(8199)
	s.Run()
}

路由中获取参数

GetRouter (key,default) 获取路由中的动态参数

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	s.BindHandler("GET:/book/*any", func(r *ghttp.Request) {
		any := r.GetRouter("any", "empty")
		r.Response.WriteJson(fmt.Sprintf("{\"any\":\"%s\"}", any))
	})
	s.SetPort(8199)
	s.Run()
}

路由注册
package main

import (
	"context"
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

type MyController struct {
}

func (my *MyController) Look(r *ghttp.Request) {
	r.Response.Writeln("函数注册")
}

func (my *MyController) See(r *ghttp.Request) {
	r.Response.Writeln("函数注册")
}

type Api struct{}

func (api *Api) Index(r *ghttp.Request) {
	r.Response.Writeln("函数注册")
}

func (api *Api) Login(r *ghttp.Request) {
	r.Response.Writeln("登陆")
}

func (api *Api) Logout(r *ghttp.Request) {
	r.Response.Writeln("退出")
}

func (api *Api) Detail(r *ghttp.Request) {
	r.Response.Writeln("详情页")
}

type PersonReq struct {
	g.Meta `path:"/see" method:"get"`
	Name   string `v:"required" dc:"Your name"`
}
type PersonRes struct {
	Reply string `dc:"Reply content"`
}

type Person struct{}

func (Person) Say(ctx context.Context, req *PersonReq) (res *PersonRes, err error) {
	g.Log().Debugf(ctx, `receive say: %+v`, req)
	res = &PersonRes{
		Reply: fmt.Sprintf(`Hi %s`, req.Name),
	}
	return
}

func main() {
	s := g.Server()
	s.Use(ghttp.MiddlewareHandlerResponse)
	// 函数注册
	s.BindHandler("GET:/a", func(r *ghttp.Request) {
		r.Response.Writeln("函数注册")
	})
	// 结构体注册 注册 MyController的Look方法
	s.BindObject("POST:/b", new(MyController), "Look")
	s.SetPort(8000)
	//分组路由
	group := s.Group("/")
	group.POST("/c", func(r *ghttp.Request) {
		r.Response.Writeln("分组路由")
	})
	//批量注册,group.Map支持method约束
	api := Api{}
	s.Group("/", func(group *ghttp.RouterGroup) {
		group.Map(g.Map{
			"POST:/index": api.Index,
			"/Login":      api.Login,
			"/Logout":     api.Logout,
			"/detail":     api.Detail,
		})
		
		//标准路由,即定义request,response struct,在其中对数据进行约束
		group.Bind(new(Person))
	})

	group.POST("/c", new(MyController))
	s.Run()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值