有人可以向我解释这个代码吗?
调用它时,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())
}
}
https://play.golang.org/p/iys7U_UMhG
我已经明白这与我正在处理一个接口到接口的nil-struct-pointer的事实有关...
但是我很困惑如何设计这个接口DoStuff
,如果想要返回一个“智能”错误对象,而不仅仅是error
。
答案 0 :(得分:0)
你走在正确的轨道上。事实是你返回指向struct的指针,你的Error
方法是用非指针调用者实现的。
以下应该有效(我只为*
方法的接收者添加了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())
}
}