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

时间:2018-12-19 22:21:40

标签: go

我在中间件函数中有这段代码:

params := r.URL.Query()

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

if tok == nil {
    tok := r.Header.Get("x-huru-api-token")
}

但我收到此错误:

enter image description here

有人知道这是怎么回事吗?

2 个答案:

答案 0 :(得分:3)

字符串不是Go语言中的指针类型,因此不能为nil。字符串的零值为空字符串(“”)。

正确的代码应为:

params := r.URL.Query()

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

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

答案 1 :(得分:2)

nilstring无效。如果要回退到缺少值和空值的标头,请使用以下代码:

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")
}

请注意此答案中的代码与问题之间的区别。此答案使用赋值在if语句中设置tok。问题中的代码使用简短的变量声明。短变量声明将不会编译,因为未使用if语句中新声明的变量。