Como comparo duas funções para igualdade de ponteiros na última semana semanal Go?
No Go, existe alguma maneira de comparar dois ponteiros de função não nulos para testar a igualdade? Meu padrão de igualdade é a igualdade dos indicadores. Caso contrário, existe algum motivo específico para a igualdade de ponteiros não ser permitida?
A partir de agora, se eu tentar fazer isso da maneira direta:
package main
import "fmt"
func SomeFun() {
}
func main() {
fmt.Println(SomeFun == SomeFun)
}
Eu receb
./func-pointers.go:12: invalid operation: SomeFun == SomeFun (func can only be compared to nil)
Entendo que esse comportamento foi introduzido recentement
Encontrei uma resposta usando o pacote reflect; no entanto, o Atom sugere abaixo que isso realmente produz um comportamento indefinido. Consulte a publicação do Atom para obter mais informações e uma possível solução alternativ
package main
import "fmt"
import "reflect"
func SomeFun() { }
func AnotherFun() { }
func main() {
sf1 := reflect.ValueOf(SomeFun)
sf2 := reflect.ValueOf(SomeFun)
fmt.Println(sf1.Pointer() == sf2.Pointer())
af1 := reflect.ValueOf(AnotherFun)
fmt.Println(sf1.Pointer() == af1.Pointer())
}
Outputs:
true
false