В Go, есть ли способ сравнить два указателя на не-nil для проверки равенства? Мой стандарт равенства - это равенство указателя. Если нет, есть ли какая-то особая причина, по которой равенство указателя не разрешено?
На данный момент, если я попытаюсь сделать это прямолинейно:
package main
import "fmt"
func SomeFun() {
}
func main() {
fmt.Println(SomeFun == SomeFun)
}
Я получаю
./func-pointers.go:12: invalid operation: SomeFun == SomeFun (func can only be compared to nil)
Насколько я понимаю, такое поведение было введено недавно.
Я нашел ответ, используя пакет отражений; однако Atom предлагает ниже, что фактически создает поведение undefined. Дополнительную информацию см. В статье Atom и возможное альтернативное решение.
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())
}
Выходы:
true
false