go 标准库可导出函数即使出现panic ,也会封装成错误来返回。
error什么时候才是nil ,只有当error 的原始类型和值都是nil 的时候,结果才是nil。
譬如 以下接口
type MyError struct{
Detail string
}
func (t *MyError) String(){
if t == nil {
return ""
}
return t.Detail
}
func MyTestFun() error{
var err *Detail
return err
}
func main(){
err := MyTestFun()
if err != nil {
panic(err)
}
fmt.Println("success")
}
调用MyTestFun后的返回值永远都是 非nil的,因为他有具体的原始类型。解决办法是返回nil 就可以确保返回结果不是非nil 即以下实现
func MyTestFun()error{
return nil
}