Avatar ·

如何在Go中正确检查nil:接口、结构体和指针

大家好!我是一名Go新手开发者,在检查nil时遇到了一个非常奇怪的问题。我有一个返回error接口的函数,我试图检查是否发生了错误。但我的代码行为出乎意料。 这是一个简化的例子: ```go type MyError struct { Code int Msg string } func (e *MyError) Error() string { return fmt.Sprintf("error %d: %s", e.Code, e.Msg) } func doSomething() error { var err *MyError = nil // ... 一些逻辑,但err保持为nil return err } func main() { err := doSomething() if err != nil { fmt.Println("有错误:", err) } else { fmt.Println("没有错误") } } ``` 我期望程序输出"没有错误",因为我返回的是nil。但它却输出"有错误: "。为什么会这样?如何在Go中正确检查nil?我听说这与接口的工作方式有关,但我不理解细节。感谢大家的帮助!