为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMTTMM 2021-10-25 18:25:36
我有一种情况,变量“err error”值的值只能是“nil”,但一旦被重新分配就断言“(err == nil) == false”。示例代码如下:package mainimport (    "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. false2015/07/30 08:28:28 main( ... ): err = (*main.TestError)(nil)最后两行如何输出?
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-10-25
  • 2 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信