golang interface对象的比较会同时比较类型和值

简介: golang interface对象的比较会同时比较类型和值

今天使用以往的工具函数来判断对象是否存在于列表时,发现明明存在的元素,一直返回了 false,很奇怪,后来才想起来 interface类型的对象除了比较值,还会比较类型,类型不对,同样匹配不上。

func InArray(obj interface{}, array interface{}) bool {
  targetValue := reflect.ValueOf(array)
  switch reflect.TypeOf(array).Kind() {
  case reflect.Slice, reflect.Array:
    for i := 0; i < targetValue.Len(); i++ {
      if targetValue.Index(i).Interface() == obj {
        return true
      }
    }
  case reflect.Map:
    if targetValue.MapIndex(reflect.ValueOf(obj)).IsValid() {
      return true
    }
  }
  return false
}
func main(t *testing.T) {
  obj := int64(234) // int64类型
  arr := []int{234, 140, 13, 42, 319, 32, 523, 49, 380, 222}
  ret := InArray(obj, arr)
  fmt.Printf("result=%v\n", ret)  // result=false
}

把 obj 对象改成 int 类型就能匹配上了

func main(t *testing.T) {
  obj := 234 // int类型
  arr := []int{234, 140, 13, 42, 319, 32, 523, 49, 380, 222}
  ret := InArray(obj, arr)
  fmt.Printf("result=%v\n", ret)  // result=false
}

参考:刘丹冰大佬的 4、interface

相关文章
|
存储 Go
Golang底层原理剖析之slice类型与扩容机制
Golang底层原理剖析之slice类型与扩容机制
170 0
|
JSON Go 数据格式
【Golang】解决使用interface{}解析json数字会变成科学计数法的问题
【2月更文挑战第9天】解决使用interface{}解析json数字会变成科学计数法的问题
484 0
|
6天前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
48 3
|
6天前
|
存储 Java Go
【Golang】(3)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句
在Go中,条件控制语句总共有三种if、switch、select。循环只有for,不过for可以充当while使用。如果想要了解这些知识点,初学者进入文章中来感受吧!
31 1
|
1月前
|
Linux Go iOS开发
IDA 9.2 发布:Golang 改进、新 UI 组件、类型解析等
IDA Pro 9.2 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
377 0
|
JSON Go 数据格式
Golang 对象深拷贝的方案以及性能比较
文章探讨了在Go语言中实现对象深拷贝的三种方法:使用gob序列化、JSON序列化和定制化拷贝,并对比了它们在性能和代码复杂度方面的优劣,建议根据具体需求选择最适合的方法。
346 1
|
Go
Golang语言基础之接口(interface)及类型断言
这篇文章是关于Go语言中接口(interface)及类型断言的详细教程,涵盖了接口的概念、定义、实现、使用注意事项以及类型断言的多种场景和方法。
308 4
|
Go
Golang语言基础数据类型之字符类型
这篇文章介绍了Go语言中的字符类型,包括字符概述、byte和rune类型的定义、转义字符的使用以及如何遍历字符串获取字符的示例。
122 0
|
存储 缓存 Go
Golang底层原理剖析之类型系统,接口与类型断言
Golang底层原理剖析之类型系统,接口与类型断言
190 2
|
Go
Golang随笔之自动类型推导[:=]踩坑
Golang随笔之自动类型推导[:=]踩坑
92 0

热门文章

最新文章

推荐镜像

更多