企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

在golang函数中使用可选参数,使用JWT的例子讲解

wudianyun 2024-12-24 11:23:52 精选文章 33 ℃

在golang函数中使用可选参数,golang常规是没有默认参数的,不像PHP可以在方法中写默认参数,操作中可以在方法里不传参。现在将在golang的函数使用可选参数,即可以选择传不传参,下面JWT作为例子,只取JWT部分来讲述。

这是JWT生成token部分


// 可选参数
type Options struct {
	SecretKey string
}

// 产生token的函数
func (j *jwtSecret) GenerateToken(args map[string]interface{}, options ...Options) (string, error) {
	if !utils.IsEmpty(options) {
		j.secretKey = []byte(options[0].SecretKey)
	}

	nowTime := time.Now()
	// 过期时间
	expireTime := nowTime.Add(60 * time.Hour).Unix()

	claims := Claims{
		args,
		jwt.StandardClaims{
			Audience:  "job",
			ExpiresAt: expireTime,
			Id:        uuid.New().String(),
			IssuedAt:  nowTime.Unix(),
			Issuer:    "gin-job",
			NotBefore: nowTime.Unix(),
			Subject:   "token",
		},
	}

	tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	token, err := tokenClaims.SignedString(j.secretKey)

	return token, err
}


这里是调用函数部分,没有传第二参数

	args := map[string]interface{}{
		"id":     "1",
		"name": "user",
	}
	token, _ := engine.NewJWT().GenerateToken(args)
	fmt.Println("生成的token:", token)

这里是调用函数部分,传了第二参数

	options := engine.Options{
		SecretKey: "SecretKey123",
	}
	args := map[string]interface{}{
		"id":     "1",
		"name": "user",
	}
	token, _ := engine.NewJWT().GenerateToken(args, options)
	fmt.Println("生成的token:", token)

以上是调用JWT部分,具体了解可以在GitHub里查找"dgrijalva/jwt-go"文档。

Tags:

最近发表
标签列表