Go のデフォルトの構造体値
Go では、int などのプリミティブ型にはデフォルト値があります。 int の場合、このデフォルト値は 0 です。ただし、手動で設定した値 0 とデフォルト値を区別するのは難しい場合があります。
次の構造体を考えてみましょう。
type test struct { testIntOne int testIntTwo int }
If 1 つのフィールドが 0 に設定された構造体を作成しますが、もう 1 つのフィールドが設定されているか、デフォルトのままであるかはわかりません。 value:
package main import "log" func main() { s := test{testIntOne: 0} log.Println(s) }
解決策
ポインタの使用
解決策の 1 つは、フィールドにポインタを使用することです。ポインタの値はゼロの nil なので、フィールドが設定されているかどうかを確認できます。
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} log.Println(s.testIntOne != nil) // Output: true log.Println(s.testIntTwo != nil) // Output: false }
メソッドの使用
別の解決策は、次のようなメソッドを作成することです。フィールドを設定し、設定されているかどうかを追跡します。直接アクセスを防ぐために、フィールド自体をアンエクスポートする必要があります:
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func main() { s := test{} s.SetOne(0) log.Println(s.oneSet) // Output: true log.Println(s.twoSet) // Output: false }
以上がGo 構造体でデフォルトのゼロ値と明示的に設定されたゼロ値を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。