当前位置: 首页 > news >正文

go的泛型

简单例子,把传入的int类型的数据,打印出来,然后返回前两位数值

func forSclice(slice []int) []int {for i, v := range slice {fmt.Println(i, v)}return slice[:2]
}

如果该方法,支持任何形式的入参呢?

func forSclice[T any](slice []T) []T {for i, v := range slice {fmt.Println(i, v)}return slice[:2]
}

能支持任何形式,显然不合理,修改一下,只支持 intfloat32

func forSclice[T int | float32](slice []T) []T {for i, v := range slice {fmt.Println(i, v)}return slice[:2]
}

image
可以使用如下方法,正常调用

	s := forSclice([]int{1, 2, 3, 4, 5})s2 := forSclice([]float32{1.0, 2.0, 3.0, 4.0, 5.0})

补充一点,其实完整的调用,应该是如下的格式,只不过,go能自动推导出来数据格式,所以此处,不需要再在方法名后声明

	s := forSclice[int]([]int{1, 2, 3, 4, 5})s2 := forSclice[float32]([]float32{1.0, 2.0, 3.0, 4.0, 5.0})

如上使用|来声明的方法,比较麻烦的话,可以使用自定义接口来实现

type MyType interface {// 注意,这个接口和普通结构不同,只能声明类型,不能声明方法int | float32
}func forSclice[T MyType](slice []T) []T {for i, v := range slice {fmt.Println(i, v)}return slice[:2]
}

你也可以进行如下声明,MyInt 是基于int定义的新类型,如果让该泛型,支持此类型。有两种功法

  1. 在泛型声明的接口中,声明此类型,例如MyFloat
  2. 使用 ~int,便能自动识别基于 MyInt 这个基于 int 的新类型
type MyInt int
type MyFloat float32type MyType interface {// 注意,这个接口和普通结构不同,只能声明类型,不能声明方法~int | float32 | MyFloat
}
http://www.sczhlp.com/news/130161/

相关文章:

  • 原码补码反码
  • lc1034-边界着色
  • 网站为什么要进行内容更新吗江苏省建设工程注册中心网站
  • WordPress美图主题湖南网站建设优化
  • 页面简单的网站青海住房与城乡建设厅网站
  • 网站建设培训四川给个网站能看的
  • 搭建个网站需要多少钱阜新建设网站
  • 盘锦化工网站建设网站设计需求文档范例
  • 网站怎么做内链外链网站建设服务器主板1150针
  • 【汽车电子】汽车功能安全标准 ISO 26262
  • ISO 26262的不同安全等级:ASIL-D ASIL-C ASIL-B ASIL-A
  • C#学习1
  • 大丰做网站的公司杭州九鸿科技网站开发
  • 马云的网站是谁建设的怎么做网站平台梦想
  • 品牌排行榜哪个网站更权威网站广告用ps如何做
  • 东莞英文建站文山seo
  • 杭州做购物网站上海比较好的seo公司
  • wordpress迁站到阿里云百度下载安装2019
  • 两个男性做网站latex写wordpress
  • wap html网站模板汉南公司网站建设
  • 广州住房和城乡建设厅网站wordpress配置伪静态
  • 网站建设 账务处理龙华区民治街道
  • 一个人做网站的难度汕头企业网络推广
  • 02020405 EF Core基础05-EF Core反向工程、EF Core和ADO.NET Core的联系、EF Core无法做到的事情
  • 02020406 EF Core基础06-EF Core生成的SQL
  • 做外贸找工厂货源网站室内设计网站哪些号
  • 企业网站推广建设文档管理系统
  • 网站建设图文片上饶专业做网站建设
  • 重庆建站程序企业网页制作公司
  • 怎么用企业网站做营销建筑网课回放