说明

在做一些实现的时候,碰到了一个棘手的问题,问题是这样的,向一个函数里传入slice和begin,end,返回slice[begin:end]。很明显这是一个实现泛型的问题,但是在做具体实现的时候出现问题。

问题

根据问题,很容易写下如下代码:

func returnSlice([]interface{}, begin, end)[]interface{}{
//...具体实现
}slice := returnSlice([]int{1,2,3,4},1,2)  // 报错:类型不匹配

显然上述代码会报类型不匹配的错误,究其原因,是编译器把[]int{1,2,3,4}作为interface{}看待了,而传入的参数类型是[]interface{},所以类型不匹配。

解决方案

需要自己构造一个将interface{}转化为[]interface{}的函数:

//将传入slice的每个元素拿出来interface()化
func ToSlice(arr interface{}) []interface{} {v := reflect.ValueOf(arr)if v.Kind() != reflect.Slice {panic("toslice arr not slice")}l := v.Len()ret := make([]interface{}, l)for i := 0; i < l; i++ {ret[i] = v.Index(i).Interface()}return ret
}

再使用的时候,就可以slice := returnSlice(ToSlice([]int{1,2,3,4}),1,2)

[Golang] 用interface{}实现泛型出现的问题相关推荐

  1. java实现鸭子类型,Golang的interface及duck typing鸭子类型

    Golang的interface及duck typing鸭子类型 "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子." 意思就是: 一个东西究 ...

  2. golang语言 []interface{}和interface{}

    文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...

  3. GoLang之interface底层系列二(类型断言)

    文章目录 GoLang之interface底层系列二(类型断言) 1.抽象类型.具体类型 2.断言的作用类型与目标类型 3.空接口.(具体类型) 4.非空接口.(具体类型) 5.空接口.(非空接口) ...

  4. Golang 为什么不能直接将任意类型数组赋值给 []interface{}完成泛型操作

    想用 []interface{} 类型来接受一个任意类型的数组,从而进行泛型操作时,发现直接赋值会发生错误,导致 panic var dataSlice []int = foo() var inter ...

  5. golang 1.18 新增泛型 简介

    目录 (一)如何对泛型进行输出 (二)如何用泛型约束使用的类型范围 (三)泛型中的接口本身对范型进行约束 (四)泛型中如何操作切片 (五)如何利用泛型实现最大值最小值函数 (六)如何使用Golang泛 ...

  6. android 集成同一interface不同泛型_Dig101:Go之读懂interface的底层设计

    Dig101: dig more, simplified more and know more 今天我们聊聊万物皆可为的接口(interface)底层设计. interface 被定义为一组方法的签名 ...

  7. android 集成同一interface不同泛型_【Java视频教程】day30-泛型??

    泛型 泛型的引入 需求:打印集合中所有字符串的长度: 结论: 再使用集合时,因为集合中可以保存不同类型的数据,保存进入集合后不管什么类型的数据都会自动向上转型为Object类型, 所以实际使用时一般需 ...

  8. android 集成同一interface不同泛型_C# 基础知识系列- 10 反射和泛型(二)

    0. 前言 这篇文章延续<C# 基础知识系列- 5 反射和泛型>,继续介绍C#在反射所开发的功能和做的努力.上一篇文章大概介绍了一下泛型和反射的一些基本内容,主要是通过获取对象的类型,然后 ...

  9. android 无线接口 泛收,Android下的Java之interface接口泛型 动态获取泛型的类型

    Android的泛型有多坑? 先来看看该问题的场景 将String转换成具体对象时,需要进行的关键点就是获取到对象的类型 // 这里定义了一个泛型R,那运行时如何获取到这个类型呢? // 第一眼看上去 ...

最新文章

  1. mysql数据库增删改实例_Mysql1:数据库表操作,增删改查举例
  2. Nature调查 l 中国博士生们的科研围城
  3. sshd_config中文手册2
  4. python资料库-Python 操作数据库之 records
  5. JPEG文件格式简单分析
  6. 多点认证wi-fi_准备使用Wi-Fi 6:认证将于2019年第三季度启动
  7. 解决svn:E200030: sqlite[S11]:database disk image is malformed
  8. moore和mealy_Mealy机和Moore机的比较研究 目录
  9. 【资讯】全球瞩目!无人驾驶真的来了!
  10. 跨平台开源通讯组件elastic communication
  11. linux线程计算,有关Linux进程与线程数目计算的问题
  12. 【Java】什么是多态?多态的实现机制是什么?
  13. 如何测试java定时器_Java--定时器测试程序
  14. CTex下载地址和方法
  15. Tomcat 中文乱码
  16. 服务器正文21:不同编译器对预编译的处理(简单介绍msvc和gcc)及常用gcc编译指令、跨平台debug、release不同指令flag选择
  17. L2十档行情API接口(十档委托、买卖队列、逐笔成交)web或软件应用xml数据接口
  18. (rear + maxSize - front) % maxSize 公式的理解(文图详解,手把手)
  19. 彻底弄透Java处理GMT/UTC日期时间
  20. 【学习笔记】NLP之影评情感分类

热门文章

  1. Html5中的Video元素使用方法
  2. echarts折线图相关
  3. [傅里叶变换及其应用学习笔记] 二十四. 级联,脉冲响应
  4. Javascript -- In
  5. BNU OJ 第26303 题 Touchscreen Keyboard
  6. easypanel mysql错误_Easypanel v1.6(虚拟主机控制面板)图文使用教程
  7. php resque 计划任务,PHP-RESQUE - 实现重试
  8. python大作业外星人入侵_【python3小白上路系列】外星人入侵——开始
  9. 开课吧java_开课吧javaee企业级开发工程师 十期
  10. Linux多线程贝叶斯建树教程,建树经验.doc