gin学习笔记

1.c.writermem的意义
2.
func (c *Context) Next() {
    c.index++
    for s := int8(len(c.handlers)); c.index < s; c.index++ {
        c.handlers[c.index](c)
    }
}

为什么最后c.index++?

3.
有这么一段代码
type Params []Param
type Param struct{
    Key string
    Value string
}

为什么不是type Params map[string]string?又或者说用[]Param有什么好处?
根据注释写到使用slice的方式主要是因为slice是有序的,url中的第N个变量就是slice中的第N个元素

4.
尝试使用PostFormMap

5.解析body或query数据
通常使用request.ParseForm后,通过r.Form或r.PostForm相应参数值,这里稍微有些不方便的是
r.Form中存储所有解析的值,包括Query及Body中的,r.PostForm只包含body中的

我们业务中通常是会明确要获取Query中或Body中的值,所以这块要稍作改写


type Values map[string]string

if v,ok:=values[key];ok{

}

6.
func (c *Context) Bind(obj interface{}) error {
    b := binding.Default(c.Request.Method, c.ContentType())
    return c.MustBindWith(obj, b)
}


interface传递也是值传递?return后obj的值会不会改变?

7.
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error) {
为什么返回三个值 第一个参数和第二个参数可否合并?

8.
_,b,c:=getdata();
_是否还会发生值传递?