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

7 go

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

params := r.URL.Query()

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

if tok == nil {
    tok := r.Header.Get("x-huru-api-token")
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

在此输入图像描述

有人知道那是什么吗?

Cer*_*món 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")
}
Run Code Online (Sandbox Code Playgroud)

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

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")
}
Run Code Online (Sandbox Code Playgroud)

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