一尘不染

检查接口是否相等{}

go

我正在搜索[]interface{}一个给定interface{}值的切片:

var v interface{}
for i := 0; i < len(A); i++ {
  if (A[i] == v) {
    fmt.Println("Gotcha!")
    break
  }
}

在普通情况下,类型为int。但是,例如,如果类型是一些自定义的,该struct怎么办?


阅读 137

收藏
2020-07-02

共1个答案

一尘不染

感谢@CodingPickle评论,我提供了Go编程语言规范中的以下内容

等号运算符==和!=适用于可比较的操作数。

关于interface{}s和structs

  • 接口值是可比较的。如果两个接口值具有相同的动态类型和相等的动态值,或者两个接口值都为nil,则它们相等。
  • 当类型X的值可比较并且X实现T时,非接口类型X的值x和接口类型T的值t可比较。如果t的动态类型等于X并且t的动态值等于x,则它们相等。 。
  • 如果结构的所有字段都是可比较的,则它们的值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。

您也可以尝试这个游乐场https://play.golang.org/p/bgO1_V87v9k

换句话说,在Go中处理平等似乎很容易!

2020-07-02