gin 使用笔记(二)出错点

Fork Me On Github
zodream 编程技术 Go 2021年04月

自动绑定表单数据

使用 ShouldBindQuery 或者 ShouldBind 需要注意结构体的格式

例如一个查询分页的参数获取

go
            
type Queries struct {
    Page     uint   `form:"page" json:"page"`
    PerPage  uint   `form:"per_page" json:"per_page"`
    Keywords string `form:"keywords" json:"keywords"`
}

func GetList(c *gin.Context) {
    var query Queries
    if err := c.ShouldBindQuery(&query); err != nil {
        // error
    }
}
123456789101112

form:"page" json:"page" 这个就是结构体的解析说明又名struct tag

这里的 form 指查询参数或表单提交的参数,如果是 GET 或 表单POST 的数据必须有这个标记,不然会绑定失败

如果是 POSTjson 则用 json:"page"

如果是 POSTxml 则用 xml:"page"

ShouldBind 是会自动判断内容的格式,是GET 会匹配网址上的参数,其他则根据 请求头 Content-Type 自动判断

reflect: reflect.Value.SetUint using unaddressable value 只要出现 using unaddressable value 就表明代码中该传引用的地方传了值

CORS 的使用

对与跨域的处理中间件必须放在全局即 *gin.Engine 上面,不能放在某一个路由组上

go
  
r := gin.Default()
r.Use(middleware.CORS)
12

原因是跨域请求会产生一个前置 OPTIONS 请求,而这个请求实际是不需要响应内容的,如果没有匹配的路由就会响应404 影响下一步浏览器发出真正的请求

websocket

不能添加请求头

所有登录信息没法通过请求头传递,而网址传递并不安全,所以只能先建立连接,然后通过发送消息传递

点击查看全文
标签: gin
0 485 0
学习go语言,使用gin搭建web服务