リフレクションを使用して Go で空の値を効率的に検出する
Go でインターフェースの値を処理し、それらが初期化されていないかどうかを判断する必要がある場合 (つまり、値が 0、""、false、または nil である場合、リフレクションは便利な機能を提供します。 解決。これを実現する方法は次のとおりです:
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface() }
2 つの異なる概念を区別することが重要です:
上記の関数2 番目のケース、つまり基礎となる値が 0 であるかどうかをチェックします。
比較対象外に関する考慮事項型
この関数は == 演算子を使用しますが、比較できない型では機能しない可能性があります。これに対処するには、代わりにreflect.DeepEqual()を使用できます。
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface()) }
この更新された関数は、比較できないものを含むすべての型で正しく動作します。
以上がリフレクションを使用して Go インターフェイスでゼロ値を効率的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。