🌾举个麦子

r.GET("/user/:name", func(c *znet.Context) {
		name := c.GetParam("name")
		c.String(200, name)
	})

输入输出

路由参数

c.GetParam("name")

GET 参数

name,ok := c.GetQuery("name")

// 支持设置默认值
c.DefaultQuery("name", "奥特曼") // 如果不存在name参数则返回 奥特曼

// 获取全部 GET 参数值
c.GetAllQueryst()

// 获取数组类型的 GET 参数值,如:name=1&name=2
c.GetQueryArray("name")

POST 参数

// 支持设置默认值
name := c.DefaultPostForm("name", "奥特曼") // 如果不存在name参数则返回 奥特曼

// curl -d "name=isMyName;name=name2"  <http://127.0.0.1:3788/>
// ["isMyName","name2"]
nameArray, ok := c.GetPostFormArray("name") // 获取name数组
// ["isMyName"]
names, ok := c.GetPostForm("name") // 获取第一个name值
name := c.PostForm("name")

// curl -d "name[one]=11;name[too]=22"  <http://127.0.0.1:3788/>
// map[one:11 too:22]
names, ok := c.GetPostFormMap("name") // 获取name字典
names := c.PostFormMap("name") // 获取name字典

// 获取请求体
raw, err := c.GetDataRaw()

// 解析 multipart form
c.MultipartForm()

// 获取文件上传
file, err := c.FormFile(key)

fileInfo, err := file.Open()
defer fileInfo.Close()
	
// 文件保存,先通过 FormFile 获取文件对象,dist 为文件路径
err := c.SaveUploadedFile(file, dist)

结构体绑定

type Form struct {
  Name string `json:"name"`
}

var data Form 

c.Bind(&data)

// 绑定并且验证数据,只支持验证不支持处理,如有需要请自行参考 数据验证
rule := c.ValidRule().Required()
err := c.BindValid(&data,map[string]zvalid.Engine{
  "name":rule.SetAlias("姓名")
})

数据验证

更多文档请参考 数据验证

name, err := c.Valid(c.ValidRule(),"参数 Name").Required().HasLetter().String()
if err != nil {
  zlog.Debug("验证失败", err)
}

客户端 IP

ip := c.GetClientIP()

// 默认情况 X-Forwarded-For 之类是全部可信的,
// 如果你不是使用 nginx 反向代理并且设置了 X-Forwarded-For $proxy_add_x_forwarded_for;
// 那么请自行配置可信代理之后再获取客户端 IP

// 支持配置 IP 与 IP 段
znet.TrustedProxies = []string{"113.65.111.18","113.65.112.1/24"}
ip := c.GetClientIP() // 只信任 IP 113.65.111.18 或 IP 段 113.65.112.1 设置的请求头

UserAgent

c.GetUserAgent() //Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0

Referer

c.GetReferer()