ホームページ >バックエンド開発 >Golang >Go で関数を比較するにはどうすればよいですか?

Go で関数を比較するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 17:58:03711ブラウズ

How to Compare Functions in Go?

Go で関数を比較する方法

はじめに

Go では関数を参照できます変数によって取得され、他の関数に引数として渡されます。ただし、Go の関数は直接比較できないことに注意することが重要です。これは、2 つの関数が等しいかどうかを判断するために標準の比較演算子 (==、!= など) を使用できないことを意味します。

正しい比較方法

2 つの関数を正確に比較する唯一の方法は、それらのアドレスを比較することです。これは、関数のアドレスによって関数を一意に識別できるためです。関数のアドレスを取得するには、次のいずれかを使用できます。

  • fmt.Sprintf(): このメソッドは、関数のアドレスを文字列に出力し、変数に格納します。
  • reflect.Value.Pointer(): このメソッドは関数の生のアドレスを返します。 value.

次の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。