普通请求输入
基础代码如下:路由用group绑定到控制器后,在控制器中写如下方法,以下代码均在此修改:
func (c *Controller) Params(request *ghttp.Request) {
m := request.GetQueryMap()
request.Response.WriteJson(m)
}
query参数获取
query参数是指以?a=1&b=2
的形式写在url中的参数,通常由GET方法传递。
单个参数值
m := request.GetQuery("name")
GetQuery可以指定参数名 称,获取对应的参数值,如果值不存在,则返回nil
还可以指定默认值,当对应参数值不存在时,返回指定的默认值
m := request.GetQuery("name", "孙行者")
返回的是一个gvar.Var
类型,可以根据需要进行类型转换,常用类型转换方法如下
func (v *Var) Bytes() []byte
func (v *Var) String() string
func (v *Var) Bool() bool
func (v *Var) Int() int
func (v *Var) Int8() int8
func (v *Var) Int16() int16
func (v *Var) Int32() int32
func (v *Var) Int64() int64
func (v *Var) Uint() uint
func (v *Var) Uint8() uint8
func (v *Var) Uint16() uint16
func (v *Var) Uint32() uint32
func (v *Var) Uint64() uint64
func (v *Var) Float32() float32
func (v *Var) Float64() float64
func (v *Var) Time(format ...string) time.Time
func (v *Var) Duration() time.Duration
func (v *Var) GTime(format ...string)
批量获取Query参数
GoFrame中提供了GetQueryMap
,GetQueryMapStrStr
,GetQueryMapStrVar
三个方法用于批量获取Query参数,三个方法使用方式一致,只是返回类型不同。
- 获取全部Query参数
m := request.GetQueryMap()
- 指定需要获取的参数名称与默认值
m := request.GetQueryMap(map[string]interface{}{"name": "者行孙", "age": 600})
将Query参数转化为自定义结构体
可以自定义结构体,将请求参数直接转化为对应的结构体:
type user struct {
Name string
Age int
}
var u *user
err := request.ParseQuery(&u)
if err != nil {
request.Response.WritelnExit("转换出借")
}
如上,结构体中成员为Name
、Age
,参数为name
和age
则参成功转换,如果结构体成员变量名与参数名不一致则无法转换,此时需要为成员变量指定其对应的参数,可以用json:
/param:
/p:
这些方式来指定。如下
type user struct {
UserName string `json:"name"`
UserAge int `p:"age"`
}
表单参数获取(POST参数获取)
表单参数获取是指获取application/x-www-form-urlencoded
、application/form-data
、multipart/form-data
等数据,也可以用来获取以json格式提交的数据,简单理解即为可以获取POST方法提交的数据。
单个参数
m := request.GetForm("name")
GetForm
用于指定参数名称,获取对应参数值,如果对应参数不存在,返回nil
也可以指定默认值,当指定参数不存在时,返回默认值
m := request.GetForm("name", "烧包谷")
返回的是一个gvar.Var
类型,可以根据需要进行类型转换
批量获取请求数据
可以用GetFormMap
、GetFormMapStrStr
、GetFormMapStrVar
批量获取请求数据,三个方法使用方式一样,只是返回的Map类型不同。
m := request.GetFormMap()
可以指定需要获取的参数以及默认值
m := request.GetFormMap(map[string]interface{}{"name": "大洋芋"})
将请求数据转化为自定义结构体
和Query参数一样,也可以将请求参数直接转为自定义结构体。如果结构体成员名称与参数名称不一致,也可以用json:
、param:
、p:
这些tag来指定对应的参数名称
type user struct {
UserName string `json:"name"`
UserAge int `p:"age"`
}
var u *user
err := request.ParseForm(&u)
if err != nil {
request.Response.WritelnExit("转换出借")
}
动态路由参数获取
动态路由需要对现有代码进行一点改动,需要先在api
包中定义请求与返回数据格式,对指定的路由进行动态注册:
api
package api
import (
"github.com/gogf/gf/v2/frame/g"
)
type Res struct {
g.Meta `mime:"text/html"`
}
type ParamReq struct {
g.Meta `path:"/params/:name" method:"all"`
}
再将控制器的的方法利用api
数据结构进行修改:
Controller
func (c *Controller) Params(ctx context.Context, req *api.ParamReq) (res *api.Res, err error) {
request := g.RequestFromCtx(ctx)
u := request.GetRouter("name")
request.Response.WriteJson(g.Map{"data": u})
return
}
获取单个参数
u := request.GetRouter("name")
返回gvar.Var
类型,可以按需要进行类型转换。也可以指定默认值。
批量获取参数
u := request.GetRouterMap()
返回值为map[string]string
。如果没有设置动态路由,则返回nil
所有请求参数获取
GoFrame中还提供了一些方法获取所有请求参数,用法与上面两种类似,只是不区分请求方法。如果GET和POST提供的参数名称相同,则POST参数优先。
获取单个参数
data := request.GetRequest("name")
// 简写
data := request.Get("name")
返回gvar.Var
类型,可以提供默认值。
批量获取请求参数
data := request.GetRequestMap()
// 可以指定需要获取的参数名及默认值
data := request.GetRequestMap(g.Map{"name": ""})
// 还有以下几种
data := request.GetRequestMapStrStr()
data := request.GetRequestMapStrVar()
将请求参数转为自定义结构体
request.Parse(&u) // u为自定义结构体指针