代码拉取完成,页面将自动刷新
go版本 >= 1.18.0
处理官方net/http的中间件,绑定解析表单,绑定解下请求头,中间件,等等。
go get gitee.com/ruige_fun/jk
go get github.com/go-playground/validator/v10
package main
import (
"gitee.com/ruige_fun/jk"
"github.com/go-playground/validator/v10"
"log"
"net/http"
)
func main() {
jk.SetValidator(validator.New()) //设置表单验证方法
mdd := jk.NewMiddleware() //创建一个中间件管理
mdd.Append(printLog) //追加一个中间件处理方法
http.HandleFunc("/ping", mdd.Get(ping)) //只处理GET请求
_ = http.ListenAndServe(":8000", nil)
}
type pPing struct {
ID uint `json:"id" url:"id" validate:"required,min=2"`
Name string `json:"name" url:"name" validate:"required,min=6"`
}
func ping(c jk.Context) {
var p pPing
err := c.Req().ReadQuery(&p) //将url查询参数,绑定到 &p
if err != nil {
_, _ = c.CWriteJSON(jk.NewRespErr(http.StatusBadRequest, "参数错误").CodeValue())
return
}
err = c.Req().Validator(p) //进行表单校验
if err != nil {
_, _ = c.CWriteJSON(jk.NewRespErr(http.StatusBadRequest, "参数错误").CodeValue())
return
}
_, _ = c.CWriteJSON(jk.NewRespOK(p, p.ID).CodeValue())
}
func printLog(c jk.Context) {
log.Println(c.Req().GetIP(), c.Req().Method(), c.Req().GetUrlPath())
}
http://127.0.0.1:8000/ping?id=1&name=abc2
{"code":400,"msg":"参数错误","data":{"data":null,"other":null}}
http://127.0.0.1:8000/ping?id=2&name=abcdefg
{"code":200,"msg":"","data":{"data":{"id":2,"name":"abcdefg"},"other":2}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。