1. ホーム
  2. go

[解決済み] Goのnil検出

2022-04-25 16:22:03

質問

Goでは、このようにnilを検出するコードを多く見かけます。

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

が、このような構造体になっています。

type Config struct {
    host string  
    port float64
}

とすると、configはConfigのインスタンスになりますね。

if config == nil {
}

というコンパイルエラーが発生します。 nil を Config 型に変換できません。

どうすればいいですか?

コンパイラがエラーを指摘しているのは、構造体インスタンスとnilを比較しているところです。構造体のインスタンスとnilを比較しているのですが、両者は同じ型ではないので、無効な比較とみなされ、怒鳴られています。

ここでやりたいことは、configインスタンスへのポインタとnilを比較することであり、これは有効な比較です。これを行うには、golangの 新しい へのポインタを初期化します。

config := new(Config) // not nil

または

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

または

var config *Config // nil

そうすると

if config == nil {
    // then
}