检查接口的平等{} [英] Checking equality of interface{}

查看:122
本文介绍了检查接口的平等{}的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为给定的界面{} 值搜索 [] interface {} 片段:

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

在普通情况下,类型是 int 。然而,我应该怎么做,例如,类型是一些自定义 struct

解决方案

感谢@CodingPickle评论,我从 Go编程语言规范


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


关于界面{} s和 structs




  • 接口值具有可比性。如果两个接口值具有相同的动态类型和相同的动态值,或者两者的值均为零,那么两个接口值相等。

  • 非接口类型X的值x和接口类型T的值t如果类型X的值是可比的,并且X实现了T,那么它们是可比的。如果t的动态类型与X完全相同,并且t的动态值等于x,则它们是相等的。
  • 所有的领域都是可比的。如果相应的非空白字段相等,则两个结构值相等。



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

I am searching a []interface{} slice for a given interface{} value:

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

In the trivial case the types are int. However what should I do if, for example, the types are some custom struct?

解决方案

Thanks to @CodingPickle comment, I provide the following from the Go Programming Language Specification

The equality operators == and != apply to operands that are comparable.

Regarding interface{}s and structs:

  • Interface values are comparable. Two interface values are equal if they have identical dynamic types and equal dynamic values or if both have value nil.
  • A value x of non-interface type X and a value t of interface type T are comparable when values of type X are comparable and X implements T. They are equal if t's dynamic type is identical to X and t's dynamic value is equal to x.
  • Struct values are comparable if all their fields are comparable. Two struct values are equal if their corresponding non-blank fields are equal.

In other words, handling equality seems easy in Go!

这篇关于检查接口的平等{}的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆