This question already has answers here:
Hiding nil values, understanding why golang fails here
(3个答案)
4年前关闭。
有人可以向我解释此go代码吗?
调用此方法时,
https://play.golang.org/p/iys7U_UMhG
我知道这与我正在处理强制转换为接口(interface)的nil-struct-pointer有关。
但是,如果要返回一个“智能”错误对象,而不仅仅是简单的
(3个答案)
4年前关闭。
有人可以向我解释此go代码吗?
调用此方法时,
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
我知道这与我正在处理强制转换为接口(interface)的nil-struct-pointer有关。
但是,如果要返回一个“智能”错误对象,而不仅仅是简单的
DoStuff
,那么我将如何设计该接口(interface)error
感到困惑。 最佳答案
您走在正确的轨道上。问题是您正在返回指向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())
}
}
关于go - 接口(interface)上的nil测试失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40142806/
10-16 03:44