当前位置: 首页 > 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.rkmt.cn/news/10583.html

相关文章:

  • 【汽车电子】汽车功能安全标准 ISO 26262
  • 02020405 EF Core基础05-EF Core反向工程、EF Core和ADO.NET Core的联系、EF Core无法做到的事情
  • 在CodeBolcks下wxSmith的C++编程教程——使用菜单和组件
  • jpegdump
  • 一个基于 .NET 开源、简易、轻量级的进销存管理系统 - 教程
  • Nginx 部署及配置
  • vite静态资源处理
  • SerpApi:一站式搜索引擎数据抓取API完全指南
  • 【Rust管理MySql】Actix Web 框架结合 MySQL 数据库进行交互
  • 审美积累 | 这样的科技网站怎么做?
  • css 使用记录 随笔
  • 【OI 档案-2025】CSP 赛前集训记(初赛后+复赛)
  • Git 从零到一:以 Gitee 为例的实战与可视化指南
  • 前沿速览:TrafficVLM、DeepSeek-Terminus、Qwen3-Omni、蚂蚁百灵、Wan2.2-Animate、Qianfan-VL
  • 从3亿到48亿:NuGet周下载量跃迁背后的.NET生态演进与未来挑战(2019-2025)
  • ReLU函数及它的导数
  • 使用Claude代码子代理生成项目特定提交消息的技术实践
  • 走迷宫(BFS)
  • MyBatis分页的原理和分页插件的原理是什么
  • 旋转图像-leetcode
  • 哪些ERP系统值得长期使用?2025年最新盘点来了!
  • 2025年9月23日 - 20243867孙堃2405
  • 软件工程学习日志2025.9.23
  • 07-django+DRF项目中统一json返回格式 - 详解
  • 软工第二次作业——个人项目
  • AT_arc181_d [ARC181D] Prefix Bubble Sort
  • 【MySQL】使用C/C++链接mysql数据库 - 指南
  • day002
  • 【51单片机】【protues仿真】基于51单片机密码锁系统 - 详解
  • cv-css 快捷方式,将指定节点的计算样式获取下拉 获取tailwind网页样式成原生样式