接口转换:interface{} 为 nil,不是 bool
interface conversion: interface{} is nil, not bool
我对 Go 比较陌生。
我正在对现有项目进行更改。
我需要检索可能存在于 HTTP 请求正文中的元素值并将其弹出。
var returnValues = body.Params["returnValues"].(bool)
delete(body.Params, "returnValues")
我在第一行遇到错误。
interface conversion: interface {} is nil, not bool
样本主体:
{
"Params": {
"returnValues": true
}
}
总是,如果您访问接口映射或默认 nil 类型并使用该映射执行操作,请确保键的值在使用之前存在于映射中。如果映射中不存在该值,它将 return nil 并使用 nil 引用恐慌。
r, ok := body.Params["returnValues"]
if !ok {
// returnValues not present in Params map. Handle the scenario
// and don't continue below
}
var returnValues = r.(bool)
delete(body.Params, "returnValues")
另外,如果您不确定要访问的变量类型,请使用类型断言并查看您的类型是否正确。然后,如果它为 null,那么它对于类型断言也是 return false。
returnValues, ok := body.Params["returnValues"].(bool)
if !ok {
// returnValues may not present in Params map. or it is not an
// boolean type, handle scenario here
}
delete(body.Params, "returnValues")
我对 Go 比较陌生。
我正在对现有项目进行更改。 我需要检索可能存在于 HTTP 请求正文中的元素值并将其弹出。
var returnValues = body.Params["returnValues"].(bool)
delete(body.Params, "returnValues")
我在第一行遇到错误。
interface conversion: interface {} is nil, not bool
样本主体:
{
"Params": {
"returnValues": true
}
}
总是,如果您访问接口映射或默认 nil 类型并使用该映射执行操作,请确保键的值在使用之前存在于映射中。如果映射中不存在该值,它将 return nil 并使用 nil 引用恐慌。
r, ok := body.Params["returnValues"]
if !ok {
// returnValues not present in Params map. Handle the scenario
// and don't continue below
}
var returnValues = r.(bool)
delete(body.Params, "returnValues")
另外,如果您不确定要访问的变量类型,请使用类型断言并查看您的类型是否正确。然后,如果它为 null,那么它对于类型断言也是 return false。
returnValues, ok := body.Params["returnValues"].(bool)
if !ok {
// returnValues may not present in Params map. or it is not an
// boolean type, handle scenario here
}
delete(body.Params, "returnValues")