Go で関数を比較する方法
はじめに
Go では関数を参照できます変数によって取得され、他の関数に引数として渡されます。ただし、Go の関数は直接比較できないことに注意することが重要です。これは、2 つの関数が等しいかどうかを判断するために標準の比較演算子 (==、!= など) を使用できないことを意味します。
正しい比較方法
2 つの関数を正確に比較する唯一の方法は、それらのアドレスを比較することです。これは、関数のアドレスによって関数を一意に識別できるためです。関数のアドレスを取得するには、次のいずれかを使用できます。
例
次の Go コードを考えてみましょう:
<code class="go">type Action func(foo string) var Undefined Action = func(foo string) {} var Defined Action = func(foo string) {} func compareFunctions() { if fmt.Sprintf("%v", Undefined) == fmt.Sprintf("%v", Undefined) { fmt.Println("Undefined and Undefined are equal") } else { fmt.Println("Undefined and Undefined are not equal") } if fmt.Sprintf("%v", Defined) == fmt.Sprintf("%v", Defined) { fmt.Println("Defined and Defined are equal") } else { fmt.Println("Defined and Defined are not equal") } if fmt.Sprintf("%v", Undefined) == fmt.Sprintf("%v", Defined) { fmt.Println("Undefined and Defined are equal") } else { fmt.Println("Undefined and Defined are not equal") } }</code>
このコードを実行すると、次の出力が生成されます。 :
Undefined and Undefined are equal Defined and Defined are equal Undefined and Defined are not equal
この出力は、関数がアドレスを使用して比較できること、および 2 つの関数が異なるアドレスは等しくありません。
結論
Go の関数値を直接比較することはできませんが、アドレスを比較して同じ関数かどうかを判断することは可能です。 。上記の方法を使用すると、Go で 2 つの関数が等しいかどうかを正確に識別できます。
以上がGo で関数を比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。