Go で関数を比較できますか?

DDD
リリース: 2024-10-30 12:16:02
オリジナル
708 人が閲覧しました

Can You Compare Functions in Go?

Go での関数の比較

Go では、関数の値は比較できません。ただし、関数値のアドレスを比較することは可能であり、特定のシナリオでは役立ちます。

関数値比較の制限

Go 仕様によると、「関数値は比較できません。 」これは、== や != などの比較演算子を使用して 2 つの関数値を直接比較できないことを意味します。

関数値アドレスの比較

関数値アドレスを比較するには、fmt を使用できます。 .Sprintf() 関数を使用して関数アドレスを取得します。以下のコードの p1 変数と p2 変数には、それぞれ Unknown 関数と hand.Get 関数のアドレスが含まれています。

<code class="go">p1 := fmt.Sprintf("%v", Undefined)
p2 := fmt.Sprintf("%v", hand.Get)</code>
ログイン後にコピー

その後、== 演算子を使用して関数値のアドレスを比較できます。

<code class="go">fmt.Println("Expecting true:", p1 == p2)</code>
ログイン後にコピー

アドレス比較とリファクタリング

関数値のアドレスを比較することは技術的には可能ですが、一般的には良い方法ではありません。関数の値はプログラムの存続期間中に変化する可能性があり、アドレス比較の信頼性が低くなる可能性があります。

関数の値のアドレスを比較する代わりに、コードをリファクタリングしてそのような比較の必要性を回避することをお勧めします。たとえば、関数値のマップを作成し、キーを比較して、どの関数が使用されているかを判断できます。

リフレクションを使用した代替方法

関数値を比較するためのもう 1 つのオプションは、リフレクションを使用することです。 Reflect.Value.Pointer() メソッドを使用すると、関数値のアドレスを取得できます。ただし、このアプローチも、上記で説明したアドレス比較手法よりも複雑でエラーが発生しやすいため、お勧めできません。

以上がGo で関数を比較できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!