在 Go 中,相等运算符(== 和 !=)可用于比较 interface{} 值。但是,由于 interface{} 值可以保存不同类型的值,因此了解如何比较这些值非常重要。
接口值是可比较的。如果满足以下条件,则两个接口值被视为相等:
在interface{}值保存自定义结构体值的情况下,Go的比较规则适用。如果结构体值的所有字段都具有可比性,则认为结构体值具有可比性。如果两个结构体值的非空字段具有相等的值,则认为它们相等。
考虑以下代码片段:
type MyStruct struct { Field1 int Field2 string } var A = []interface{}{} v := MyStruct{1, "Test"} for _, i := range A { if i == v { fmt.Println("Gotcha!") break } }
在此示例中, == 运算符用于将interface{} 值(v) 与interface{} 切片中的值(A) 进行比较。由于 MyStruct 的值是可比较的,因此如果 v 中的相应字段与 A 中的元素相等,则比较将返回 true。
通过了解 Go 对 interface{} 值和结构体的相等规则,开发人员可以自信地在代码中比较这些值。 Go 清晰灵活的系统可确保相等性检查按预期工作,无论底层数据类型如何。
以上是Go 如何比较接口值(包括结构体)?的详细内容。更多信息请关注PHP中文网其他相关文章!