我在 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
编译器将错误指向您,您正在比较结构实例和 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 }