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

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?
