ホームページ >バックエンド開発 >Golang >Go 構造体フィールドが明示的に設定されているかどうかを確認するにはどうすればよいですか?

Go 構造体フィールドが明示的に設定されているかどうかを確認するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 21:24:15571ブラウズ

How Can I Determine if a Go Struct Field Has Been Explicitly Set?

Go 構造体のデフォルト値

Go では、構造体 (struct) にはフィールドのデフォルト値があります。たとえば、整数 (int) のデフォルトは 0 です。これは多くのシナリオで便利ですが、0 が有効な値であるシナリオでは問題が生じる可能性があります。このため、構造体のフィールドが明示的に設定されているかどうかを知ることが困難になります。

デフォルト値と設定値の区別

残念ながら、Go にはフィールドがデフォルト値に設定されているか初期化されているかを直接判断する方法。ただし、次の 2 つの方法を使用できます。

ポインターの使用

設定を解除できるフィールドにポインターを使用できます。ポインタには nil ゼロの値があり、フィールドが設定されているかどうかを確認するために使用できます。

type Test struct {
    TestIntOne *int
    TestIntTwo *int
}

この場合、TestIntOne と TestIntTwo は整数へのポインタです。 TestIntOne が nil の場合は設定されていないことを意味し、nil でない場合はゼロ以外の値が設定されていることを意味します。

メソッドの使用

あるいは、フィールドを設定し、フィールドが設定されているかどうかを追跡するメソッドを作成することもできます。 not:

type Test struct {
    TestIntOne int
    TestIntTwo int

    isSetOne, isSetTwo bool
}

func (t *Test) SetIntOne(i int) {
    t.TestIntOne = i
    t.isSetOne = true
}

このメソッドを使用すると、TestIntOne の設定を制御でき、isSetOne プロパティは設定されているかどうかを示します。

結論

Go 構造体にはフィールドのデフォルト値がありますが、フィールドが手動で設定されているか、または次のように初期化されているかを直接判断する方法はありません。そのデフォルト値。ただし、ポインターまたはメソッドを使用すると、この制限を回避し、構造体のフィールドの状態を維持できます。

以上がGo 構造体フィールドが明示的に設定されているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。