首页 > 后端开发 > Golang > 如何在 Go 中安全地比较函数指针的同一性?

如何在 Go 中安全地比较函数指针的同一性?

Linda Hamilton
发布: 2024-12-26 17:55:09
原创
699 人浏览过

How Can I Safely Compare Function Pointers for Identity in Go?

Go 中的函数指针相等

在 Go 中,不允许使用 == 或 != 运算符来比较函数指针的相等性不为零。此行为可以防止相等和恒等比较的混合。

函数相等与函数恒等不同。应该使用同一性比较来确定两个函数是否是同一个函数,而应该使用相等性比较来确定两个函数是否等价。

使用reflect包来比较函数同一性,如Atom示例所示,被视为未定义的行为。编译器可能会通过合并函数的实现来优化函数,从而使比较变得不可靠。

要正确比较函数指针的同一性,您可以为每个函数创建唯一的变量,然后比较这些变量的地址。这种方法可确保您比较同一函数的函数指针,而不管优化如何。

以下是如何比较函数指针同一性的示例:

package main

import "fmt"

func F1() {}
func F2() {}

var F1_ID = F1  // Create a *unique* variable for F1
var F2_ID = F2  // Create a *unique* variable for F2

func main() {
    f1 := &F1_ID  // Take the address of F1_ID
    f2 := &F2_ID  // Take the address of F2_ID

    // Compare pointers
    fmt.Println(f1 == f1)  // Prints true
    fmt.Println(f1 == f2)  // Prints false
}
登录后复制

以上是如何在 Go 中安全地比较函数指针的同一性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板