我正在[]interface{}
切片中搜索给定的interface{}
值:
var v interface{}
for i := 0; i < len(A); i++ {
if (A[i] == v) {
fmt.Println("Gotcha!")
break
}
}
在简单的情况下,类型为int
。但是,如果类型是某些自定义struct
,我该怎么办?
答案 0 :(得分:24)
感谢@CodingPickle评论,我从Go Programming Language Specification
提供以下内容相等运算符==和!=适用于可比较的操作数。
关于interface{}
和structs
:
换句话说,在Go中处理平等似乎很容易!
答案 1 :(得分:0)
更新:自从上面的问题和答案被编写以来,Go语言已经发生了微小变化。
以前,如果比较两个接口,并且其中一个或两个都包含不可比较的类型,则运行时会出现恐慌。现在,只有它们都包含 same 不可比较的类型时,运行时才会惊慌。 (如果它们包含不同的类型,那么即使两种类型都无法比较,结果现在也会为假。)
什么是不可比类型?基本上,它们是切片,映射,函数以及使用它们的任何结构或数组类型。
对AFAIK来说,这是Go 1.9或1.10的无声更改。
答案 2 :(得分:0)