Go 接口上的无测试失败
有人能给我解释一下这个密码吗?Go 接口上的无测试失败,go,error-handling,null,Go,Error Handling,Null,有人能给我解释一下这个密码吗? 调用此命令时,err!=nil返回true,从而导致一个nil指针引用 type E struct{} func (e E) Error() string { return "" } func DoStuff() *E { return nil } func main() { var err *E err = DoStuff() log.Println(err) // nil testErr(err) } f
调用此命令时,
err!=nil
返回true,从而导致一个nil指针引用
type E struct{}
func (e E) Error() string {
return ""
}
func DoStuff() *E {
return nil
}
func main() {
var err *E
err = DoStuff()
log.Println(err) // nil
testErr(err)
}
func testErr(err error) {
if err != nil {
log.Println("got error", err.Error())
}
}
我知道这与我正在处理一个铸造到接口的nil结构指针有关
然而,如果想要返回一个“智能”错误对象,而不仅仅是简单的
错误
,我不知道如何设计这个接口。问题是,您正在返回指向struct的指针,并且您的Error
方法是使用非指针调用方实现的
以下方法应该有效(我只为错误的接收器添加了*
:
package main
import "log"
type E struct{}
func (e *E) Error() string {
return ""
}
func DoStuff() *E {
return nil
}
func main() {
var err *E
err = DoStuff()
log.Println(err) // nil
testErr(err)
}
func testErr(err error) {
if err != nil {
log.Println("got error", err.Error())
}
}
虽然这不会崩溃,但它仍然会回显“Get error”——即使传递的错误值实际上为零?