Go でのリフレクションを使用した空の値の検出
Go では、インターフェイスの値が保持できるかどうかを知ることが重要です。{}任意の型、空または初期化されていません。空のインターフェース値には、0、""、false、nil などの値を含めることができます。{}この空性を判断することは、データ検証と型アサーションにとって非常に重要です。これを達成する効率的な方法の 1 つは、リフレクションを使用することです。
インターフェイス{}の値が空かどうかを確認するには、IsZeroOfUnderlyingType 関数を使用できます。
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface() }
次の違いを理解することが重要です。 :
関数 IsZeroOfUnderlyingType は 2 番目の値をチェックします。 場合。ただし、== を使用しているため、すべての型で機能するとは限りません。これは同等の型でのみ機能します。
この制限に対処するには、関数を変更して、代わりにreflect.DeepEqual() を使用することができます。すべての型を処理できます:
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface()) }
この改良された関数により、基礎となる型に関係なく、interface{} 値が空かどうかを確実に判断できるようになりました。
以上がGo のリフレクションはどのようにして空のインターフェイス値を効率的に検出できますか?{}の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。