【青训营】1月18日总结

80 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第3天

问题总结:

1.      Gin提供了两套绑定方法:Bind与ShouldBind,如果你希望更好地控制行为,请使用ShouldBind相关的方法。当我们使用绑定方法时,Gin会根据Content-Type推断出使用哪种绑定器,如果你确定你绑定的是什么,你可以使用MustBindWith或者BindingWith。你还可以给字段指定特定规则的修饰符,如果一个字段用binding:"required"修饰,并且在绑定时该字段的值为空,那么将返回一个错误。

跳过验证:

当使用上面的curl命令运行上面的示例时,返回错误,因为示例中Password字段使用了binding:"required",如果我们使用binding:"-",那么它就不会报错。

type Login struct {
User string `form:"user" json:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" xml:"password" binding:"required"`
}

func RefreshTokenInterceptor() gin.HandlerFunc {
   return func(c *gin.Context) {
       var json Login
       c.ShouldBindJSON(&json);
   }
}

 

2.      Gin框架提供了Set和Get方法可以把信息存入到上下文中,供后续处理函数使用

3.      Gin的Abort和Next方法执行后并且执行完后续的处理函数仍会执行当前函数内后面的语句,如果想要直接跳转出去可以return,return相当于走完当前函数,进入下一个中间件

Func HttpInterceptor() gin.HandlerFunc {
    return func(c *gin.Context) {
        //校验
       c.Abort () *//* *调用后续的处理函数*
       //仍会执行

       c. Next () *//* *阻止调用后续的处理函数*
       return;
       //停止执行
    }
}

4.      Pipelined不是事务,不具备一致性。使用pipeline组装的命令个数不能太多,不然数据量过大,增加客户端的等待时间,还可能造成网络阻塞,可以将大量命令的拆分多个小的pipeline命令完成。(在集群模式下慎用)

5.       redis.Nil 错误来表示 Key 不存在的错误,与nil不同,需要特判

6.      redis相关基础数据类型选择:

-          string:修改对象某个字段时不方便

-          hash:可以针对单个字段CRUD

-          list:保存有序结构 比如点赞顺序信息

-          set 有并集差集等操作 实现共同关注,好友列表等