当尝试将一个 nil 的 interface{} 转换为 string 类型时,会出现 “interface conversion: interface {} is nil, not string” 的错误。要捕获这个错误,可以使用类型断言和 panic/recover。
例如:
func getString(i interface{}) (string, error) {
if i == nil {
return "", fmt.Errorf("cannot convert nil interface to string")
}
s, ok := i.(string)
if !ok {
return "", fmt.Errorf("cannot convert %T to string", i)
}
return s, nil
}
func main() {
defer func() {
if r := recover(); r != nil {
log.Printf("panic: %v", r)
}
}()
var i interface{} = nil
_, err := getString(i)
if err != nil {
panic(err)
}
}
在上面的例子中,getString 函数首先检查传入的参数是否为nil,并返回相应的错误。接下来,使用类型断言将 interface{} 转换为 string 类型。如果转换失败,则返回另一个错误。
在主函数中,我们使用 defer 和 recover 捕获了可能发生的 panic,并打印出错误信息。
通过这种方式,在代码中捕获和处理 “interface conversion: interface {} is nil, not string” 错误是可行的。