小编典典

Go中的零检测

all

我在 Go 中看到很多代码来检测 nil,如下所示:

if err != nil { 
    // handle the error    
}

但是,我有一个这样的结构:

type Config struct {
    host string  
    port float64
}

并且 config 是 Config 的一个实例,当我这样做时:

if config == nil {
}

有编译错误,说:cannot convert nil to type Config


阅读 84

收藏
2022-07-07

共1个答案

小编典典

编译器将错误指向您,您正在比较结构实例和 nil。它们不是同一类型,因此它认为这是无效的比较并对你大喊大叫。

您在这里要做的是将指向您的配置实例的指针与 nil 进行比较,这是一个有效的比较。为此,您可以使用 golang new
内置函数,或初始化指向它的指针:

config := new(Config) // not nil

或者

config := &Config{
                  host: "myhost.com", 
                  port: 22,
                 } // not nil

或者

var config *Config // nil

然后你就可以检查是否

if config == nil {
    // then
}
2022-07-07