1.govalidator过滤器:类似于正则匹配,主要放在结构体注释部分,有些验证没有,需要自己替换(把required部分替换成正则表达式)
引入资源包(两种方式):
go get github.com/asaskevich/govalidator
go get gopkg.in/asaskevich/govalidator.v10
代码(可以写在结构体中,也可以单独使用):
type User struct {
     gorm.Model
     USERNAME string `json:"name" validate:"min=0,max=35"`
     PASSWOR string `validate:"required"`
     SEX int8  `validate:"required"`
     PHONE string  `validate:"required"`
     EMAIL string `validate:"required,email"`
     ADDRESS string `json:"address" validate:"lte=0,gte=90"`
     STATUS int8 `validate:"required"`
     LOGINTIME time.Time `validate:"required"`
     LOGINIP string `validate:"required"`
     LOGOUTTIME time.Time `validate:"required"`
 }
2.MD5加密:不可逆加密(框架内置,不需要额外引入包)
//小写版本
 func Md5string(str string)  string{
     //初始化
     h := md5.New()
     //转换成文件流
     h.Write([]byte(str))
     temp :=h.Sum(nil)
     //输出
     return hex.EncodeToString(temp)
 }
//大写版本
 func MD5string(str string)  string{
     //初始化
     h := md5.New()
     //转换成文件流
     h.Write([]byte(str))
     temp :=h.Sum(nil)
     //输出
     return strings.ToUpper(hex.EncodeToString(temp))
 }
3.jwt结构(JSON Web令牌):它是一个签名的JSON对象,可以做一些验证类的事情,可以看成是服务器发出的令牌,每次有新请求就会去验证(单点登录),如果是验证错误直接退出当前流程
组成部分
1.Header(标头)
2.Payload(有效载荷 )
3.Signature(签名)

引入资源包
go get -u github.com/dgrijalva/jwt-go
代码:
import (
     "fmt"
     "github.com/dgrijalva/jwt-go"
     "github.com/gin-gonic/gin"
     "time"
 )
type Claim struct {
     USERNAME string `josn:"userbane" validate:"required"`
     PASSWORD string `josn:"password" validate:"required"`
     //jwt标准结构
     jwt.StandardClaims
 }
//密码(自定义:最好是写在配置文件,配合redis取用)
 var jwtkey = []byte("local")
func main()  {
     //初始化
     g := gin.Default()
     g.GET("indexs",Indexs)
     g.GET("indexparse",Parsetoken)
     g.Run(":8080")
 }
func Indexs(ctx *gin.Context)  {
     //获取参数
     uarname := ctx.Query("uarname")
     password := ctx.Query("password")
     expireTime := time.Now().Add(7 * 24 * time.Hour)
    //赋值
     claims := &Claim{
         USERNAME: uarname,
         PASSWORD: password,
         StandardClaims: jwt.StandardClaims{
             ExpiresAt: expireTime.Unix(), //过期时间
             IssuedAt:  time.Now().Unix(),//起始时间
             Issuer:    "127.0.0.1",  // 签名颁发者
             Subject:   "token", //签名主题
         },
     }
     //生成秘钥
     token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
     //获取秘钥
     tokenString, _ := token.SignedString(jwtkey)
     ctx.JSON(200,gin.H{
         "ping":tokenString,
     })
 }
func Parsetoken(ctx *gin.Context)  {
     //接收参数
     tokenst := ctx.GetHeader("Authorization")
     //判断参数是否为空
     if tokenst=="" {
         ctx.JSON(400,gin.H{
             "ping":"参数错误",
         })
     }
     //解码
     token, claims, err := ParseToken(tokenst)
     if err != nil || !token.Valid {
         ctx.JSON(400, gin.H{"ping":"秘钥错误"})
         ctx.Abort()//调过剩余的方法,直接返回
         return
     }
    //打印结构体(解码回传数据)
     fmt.Println(claims)
 }
//解码方法
 func ParseToken(tokenString string)  (*jwt.Token,*Claim,error){
     //初始化结构体
     Claims := &Claim{}
     //内置解码方法
     token, err := jwt.ParseWithClaims(tokenString, Claims, func(token *jwt.Token) (i interface{}, err error) {//匿名方法(可以分开写,也可以按照现在这样)
         return jwtkey, nil
     })
     return token, Claims, err
 }
4.redis:非关系型数据库(具体了解可以看博主之前的文章)
引入资源包
go get -u github.com/go-redis/redis
//代码示例
import (
   "fmt"
   "github.com/go-redis/redis"
   "github.com/spf13/viper"
)
func Initredis() (errreback error) {
   //vip获取配置
   viper.SetConfigName("app")
   viper.AddConfigPath("config")
   err := viper.ReadInConfig()
   if err != nil {
      fmt.Println("redis参数配置错误")
   }
   //链接参数
   Rdb := redis.NewClient(&redis.Options{
      //链接地址
      Addr:     viper.GetString("redis.local") + ":" + viper.GetString("redis.port"),
      //链接密码
      Password: viper.GetString("redis.password"),
      //默认数据库
      DB:0,
      //Redis连接池大小
      PoolSize: 10,
      //最大重试次数
      MaxRetries: 3,
   })
   //链接
   _, err = Rdb.Ping().Result()
   if err != nil {
      fmt.Println("redis链接错误")
   }
   //返回值
   return nil
}
                


















