我在中间件函数中有这段代码:
params := r.URL.Query()
tok := params["x-huru-api-token"][0];
if tok == nil {
tok := r.Header.Get("x-huru-api-token")
}
但我收到此错误:
有人知道这是怎么回事吗?
答案 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)
值nil
对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")
}
请注意此答案中的代码与问题之间的区别。此答案使用赋值在if语句中设置tok
。问题中的代码使用简短的变量声明。短变量声明将不会编译,因为未使用if语句中新声明的变量。