在 Go 中,函数值是不可比较的。但是,可以比较函数值的地址,这在某些情况下很有用。
根据 Go 规范,“函数值是不可比较的。 ”这意味着您不能使用 == 或 != 等比较运算符直接比较两个函数值。
要比较函数值地址,您可以使用 fmt .sprintf()函数获取函数地址。下面代码中的 p1 和 p2 变量分别包含 Undefined 和 hand.Get 函数的地址。
<code class="go">p1 := fmt.Sprintf("%v", Undefined) p2 := fmt.Sprintf("%v", hand.Get)</code>
然后可以使用 == 运算符来比较函数值地址:
<code class="go">fmt.Println("Expecting true:", p1 == p2)</code>
虽然在技术上可以比较函数值地址,但这通常不是一个好的做法。函数值可能会在程序的生命周期内发生变化,这可能会使地址比较变得不可靠。
与其比较函数值地址,不如重构代码以避免进行此类比较。例如,您可以创建函数值映射并比较键以确定正在使用哪个函数。
比较函数值的另一个选项是使用反射。 Reflect.Value.Pointer() 方法允许您获取函数值的地址。但是,也不推荐这种方法,因为它比上述地址比较技术更复杂且更容易出错。
以上是你能比较 Go 中的函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!