首页 > 后端开发 > Golang > 在 Go 中如何可靠地比较函数指针是否相等?

在 Go 中如何可靠地比较函数指针是否相等?

Linda Hamilton
发布: 2024-12-18 09:35:11
原创
233 人浏览过

How Can I Reliably Compare Function Pointers for Equality in Go?

每周检测 Go 中函数的指针相等性

传统上,比较 ​​Go 中的两个非 nil 函数指针涉及使用 == 或 != 运算符。然而,根据最近的变化,这种方法现在会导致错误。

更改背后的基本原理

函数指针相等比较的消除源于相等与同一的概念。在 Go 中,== 和 != 运算符评估值的等价性,而不是同一性。这种区别旨在防止这些概念之间的混淆。

性能注意事项

此外,函数的比较也会影响性能。例如,不引用外部变量的匿名闭包应该由编译器优化为单个实现。比较函数指针会阻碍这种优化,需要在运行时动态创建新的闭包。

利用 Reflect 包

虽然可以使用 Reflect 包确定函数标识,但需要注意的是这种方法会带来未定义的行为。这种比较的结果是不可靠的,因为编译器可能决定将多个函数折叠成一个实现。

有效的解决方案

为了有效地比较函数指针,可以采用以下方法:

package main

import "fmt"

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

var F1_ID = F1 // Assign a unique variable to F1
var F2_ID = F2 // Assign a unique variable to 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板