構造体のデフォルト値
Go では、構造体の宣言時に初期化されない構造体のフィールドにデフォルト値が割り当てられます。 int のようなプリミティブ型の場合、このデフォルト値は 0 です。ただし、この値が明示的に設定されているか、デフォルト値であるかを判断するのは問題になる可能性があります。
違いはありますか?
残念ながら、Go はフィールドが設定されているかどうかを追跡しません。したがって、0 に初期化されたフィールドとまったく設定されていないフィールドを区別する方法はありません。
回避策
1.ポインタの使用:
ポインタを使用すると、ポインタの nil ゼロ値を利用できます。ポインタが nil の場合、それが設定されていないことを示します。
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} fmt.Println("testIntOne set:", s.testIntOne != nil) fmt.Println("testIntTwo set:", s.testIntTwo != nil) }
2.メソッドの使用:
フィールドを設定し、設定されたかどうかを追跡するメソッドを定義することもできます。
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func (t *test) SetTwo(i int) { t.testIntTwo, t.twoSet = i, true } func main() { s := test{} s.SetOne(0) fmt.Println("testIntOne set:", s.oneSet) fmt.Println("testIntTwo set:", s.twoSet) }
以上がGo 構造体でデフォルトのゼロ値と明示的に設定されたゼロ値を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。