问题
go-zero框架如何取出token:
func (l *SearchLogic) Search(req types.SearchReq) (*types.SearchReply, error) {
logx.Infof("userId: %v",l.ctx.Value("userId"))// 这里的key和生成jwt token时传入的key一致
return &types.SearchReply{}, nil
}
通过 l.ctx.Value("userId")
取出来的id通过类型断言无法转化为 int类型
使用reflect包查看其类型,为json.Number
,而能正常转化为int对象的interface{} 其类型为int
验证代码
fmt.Println(l.ctx.Value("userId"))
var c interface{}
c = l.ctx.Value("userId")
//c = 18
fmt.Println("c是什么", c)
fmt.Println(reflect.TypeOf(c))
var a interface{}
a = 5
fmt.Println("a是什么", a)
fmt.Println(reflect.TypeOf(a))
结果:
1
c是什么 1
json.Number
a是什么 5
int
解决
查看json.Number实现之后,发现其就是string
将其先类型断言为json.Number类型之后,再转成string 再转为int或者直接使用Number类型自己的方法都可以解决