为了账号安全,请及时绑定邮箱和手机立即绑定

无法将 nil 转换为类型字符串

无法将 nil 转换为类型字符串

Go
万千封印 2023-05-22 15:45:49
我在中间件函数中有这段代码:params := r.URL.Query()tok := params["x-huru-api-token"][0];if tok == nil {    tok := r.Header.Get("x-huru-api-token")}但我收到此错误:有人知道那是什么吗?
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

该值nil不是 a 的有效值string。如果您想回退到缺少值和空值的标题,请使用以下代码:


params := r.URL.Query()

tok := params.Get("x-huru-api-token")

if tok == "" {

    tok = r.Header.Get("x-huru-api-token")

}

如果您只想在缺少查询参数时回退到标头,请使用以下内容:


params := r.URL.Query()

var tok string

if values, ok := params["x-huru-api-token"]; ok && len(values) > 0 {

   tok = values[0]  // note that tok can be the empty string ""

} else {

   tok = r.Header.Get("x-huru-api-token")

}

请注意此答案中的代码与问题中的一个区别。tok这个答案在 if 语句中使用赋值来设置。问题中的代码使用了简短的变量声明。短变量声明将无法编译,因为未使用 if 语句中新声明的变量。


查看完整回答
反对 回复 2023-05-22
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

String 不是 Go 中的指针类型,因此它不能是nil。字符串的零值为空字符串 ("")。


正确的代码应该是:


params := r.URL.Query()


tok := params["x-huru-api-token"][0];


if tok == "" {

    tok := r.Header.Get("x-huru-api-token")

}


查看完整回答
反对 回复 2023-05-22
  • 2 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信