在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在下面暗示这实际上会产生未定义的行为。有关更多信息和可能的替代解决方案,请参见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
慕丝7291255
相关分类