Go での関数変数の通常の使用では、変数同士ではなく、nil とのみ比較できます。この理由は (私に説明されているように)、Go にはクロージャーがあるため、平等の定義が曖昧だからです。ローカル変数にバインドされた異なる値を持つ 2 つの異なるクロージャがあり、それらが同じ基になる関数を使用している場合、それらは等しいか等しくないと見なされるべきですか?
しかし、私はそのような比較をできるようにしたいと思っています。具体的には、次のようなコードがあります (ただし、実際のコードではチェックが実際に必要です。これは単なるダミーの例です)。ここでは、関数ポインターを関数リテラルと比較します。
func getFunc(which bool) (func ()) {
if which {
return func1
} else {
return func2
}
}
func func1() { }
func func2() { }
f := getFunc(true)
if f == func1 {
fmt.Println("func1")
} else {
fmt.Println("func2")
}