猿问

为什么是“错误!= nil”?

我有一种情况,变量“err error”值的值只能是“nil”,但一旦被重新分配就断言“(err == nil) == false”。


示例代码如下:


package main


import (

    "fmt"

    "log"

)


type TestError struct {

    Message string

}


func (e *TestError) Error() string {

    return e.Message

}


func NewTestError(err error) *TestError {

    if err == nil {

            return nil

    }

    log.Printf("NewTestError( ... ): creating new NewTestError err = %s", err)

    return &TestError{Message: err.Error()}

}


func main() {

    var err error

    _, err = fmt.Printf("excuse.\n")

    err = NewTestError(err)

    log.Printf("main( ... ): err == nil. %v", (err == nil))

    log.Printf("main( ... ): err = %#v", err)

}

我从上面的代码中得到以下输出:


excuse.

2015/07/30 08:28:28 main( ... ): err == nil. false

2015/07/30 08:28:28 main( ... ): err = (*main.TestError)(nil)

最后两行如何输出?


MMTTMM
浏览 289回答 2
2回答

杨__羊羊

在第二种情况下,您正在打印接口实例信息,即类型和值,类型为(*main.TestError)value 为(nil)。在第一种情况下,您实际比较的不是nil因为它也是界面。
随时随地看视频慕课网APP

相关分类

Go
我要回答