Go のデフォルト値と初期化されていないフィールドの区別
Go では、プリミティブ型にはデフォルト値があります。たとえば、整数 (int) は 0 に初期化されます。ただし、構造体を操作する場合、値 0 と初期化されていないフィールドを区別するのは難しい場合があります。
たとえば、以下のコードを考えてみましょう。
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }
このコードでは、testIntOne と testIntTwo は両方とも 0 です。ただし、testIntOne は明示的に 0 に設定されており、testIntTwo はデフォルト値で初期化されています。このあいまいさは、どのフィールドが明示的に設定されているかを判断する際に混乱を招く可能性があります。
これら 2 つのケースを区別することは可能ですか?
いいえ、Go はどちらかを追跡しません。フィールドが設定されているかどうか。したがって、ゼロ値が初期化の結果であるか意図的な割り当てであるかを知ることは不可能です。
回避策
type test struct { testIntOne *int testIntTwo *int }
type test struct { testIntOne int testIntTwo bool // Tracks if testIntTwo has been set } func (t *test) SetTestIntTwo(val int) { t.testIntTwo = val t.isSetTestIntTwo = true } func main() { s := test{} s.SetTestIntTwo(0) fmt.Println(s.isSetTestIntTwo) // Output: true }
以上がGo 構造体でデフォルトのゼロ値と明示的に設定されたゼロ値を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。