Golang 泛型

前言

泛型是在Go 1.18版本中引入的,它允许编写可以在多种数据类型上工作的函数和数据类型。这样做可以增加代码的复用性并减少重复

使用

  1. 类型参数(Type Parameters): 你可以在函数或类型定义上声明类型参数,使其具有泛型性。类型参数被放在方括号中,并在函数签名或类型声明中使用

来看个例子:

package mainimport "fmt"// 定义一个泛型函数
func Print[T any](s []T) {for _, v := range s {fmt.Println(v)}
}func main() {// 使用泛型函数打印不同类型的切片Print([]int{1, 2, 3})Print([]string{"hello", "world"})
}

Print 函数通过类型参数 T 来接受任意类型的切片。类型参数 T 被约束为 any,这意味着 T 可以是任何类型。然后我们可以传入不同类型的切片给 Print 函数

  1. 类型约束(Type Constraints): 类型参数可以有约束,用来限制可以传递给泛型的类型。这些约束是接口类型
type Number interface {int | float64
}// Sum 将一个 Number 类型的切片中的所有元素相加
func Sum[T Number](s []T) T {var sum Tfor _, v := range s {sum += v}return sum
}

Sum 函数只接受实现了 Number 接口的类型,这个接口是一个类型约束,它包含 int 和 float64 类型。这意味着你只能传入 int 或 float64 类型的切片

  1. 使用泛型: 在调用泛型函数时,可以显式指定类型参数,也可以让编译器根据传入的参数进行类型推断
Print[int]([]int{1, 2, 3})
Print([]int{1, 2, 3}) // 类型推断
  1. 泛型数据结构: 可以创建泛型的结构体、接口、切片等数据结构
type Stack[T any] struct {elements []T
}
  1. 方法和泛型: 在泛型类型上可以定义方法
func (s *Stack[T]) Push(v T) {s.elements = append(s.elements, v)
}
  1. 嵌套的泛型类型: 泛型类型可以嵌入其他泛型类型
type Pair[T1, T2 any] struct {First  T1Second T2
}
  1. 泛型与接口: 泛型类型可以实现接口
func (p Pair[T1, T2]) String() string {return fmt.Sprintf("(%v, %v)", p.First, p.Second)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白嫖aws创建Joplin server服务器

网上有很多的Joplin服务器的搭建教程,但是基本都是抄来抄去,对初学者实在是太不友好了。 话不多说,说干就干,自己从头找资料搭了一个,这可能是全网最好的Joplin服务器搭建教程了。 aws服务器 aws的服务器还是很香的&…

企业用WhatsApp营销的好处有哪些?

1.建立良好的客户关系 WhatsApp是全球用户喜爱的即时通信软件,使用WhatsApp与客户沟通,可拉进企业和客户双方的距离。使用WhatsApp会话和消息推送功能,企业和用户可实时开展消息对话,及时解决客户咨询与疑虑,构建便捷…

移动通信原理与关键技术学习之信道编解码(5)

先回顾调制的过程:调制就是对信号源的信息进行处理加到载波上,使其变为适合于信道传输的形式的过程,就是使载波随信号而改变的技术。 1.什么是IQ调制? 答:将数据分为两路,分别进行载波调制,两…

PIG框架学习2——资源服务器的配置详解

一、前言 1、pig资源服务器的配置 Spring Security oauth2相关的依赖是在pigx-common-security模块中引入的,其他模块需要进行token鉴权的,需要在微服务中引入pigx-common-security模块的依赖,从而间接引入相关的Spring security oauth2依赖…

39 C++ 模版中的参数如果 是 vector,list等集合类型如何处理呢?

在前面写的例子中,模版参数一般都是 int,或者一个类Teacher,假设我们现在有个需求:模版的参数要是vector,list这种结合类型应该怎么写呢? //当模版中的类型是 vector ,list 等集合类型的时候的处…

【LeetCode】27. 移除元素(简单)——代码随想录算法训练营第1天

题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出…

R语言【base】——sample():随机取样和排列

Package base version 4.2.0 Description sample() 使用替换或不替换从参数【x】的元素中获取指定大小的样本。 Usage sample(x, size, replace FALSE, prob NULL)sample.int(n, size n, replace FALSE, prob NULL,useHash (n > 1e07 && !replace &&…

20240110在ubuntu20.04下重启samba服务

20240110在ubuntu20.04下重启samba服务 百度搜索:samba restart https://www.python100.com/html/78028.html 重启samba命令详解 更新:2023-05-17 16:04 一、重启samba命令 重启samba可以使用以下命令: /etc/init.d/smb restart 或者 syste…

中国智造闪耀CES | 木牛科技在美国CES展亮相多领域毫米波雷达尖端方案

素有全球科技潮流“风向标”之称的2024国际消费类电子产品展(CES),于1月9-12日在美国拉斯维加斯会议中心举办。CES是全球最大的消费电子和消费技术展览会之一,汇集了世界各地优秀的消费电子和科技公司,带着最好的产品来…

uniapp项目怎么删除顶部导航栏

uniapp去掉顶部导航的方法: 1、去掉所有导航栏 "globalStyle": { "navigationBarTextStyle": "white", "navigationBarTitleText": "uni-app", "navigationBarBackgroundColor": "#007AFF"…

Apache ActiveMQ RCE CNVD-2023-69477 CVE-2023-46604

漏洞简介 Apache ActiveMQ官方发布新版本,修复了一个远程代码执行漏洞,攻击者可构造恶意请求通过Apache ActiveMQ的61616端口发送恶意数据导致远程代码执行,从而完全控制Apache ActiveMQ服务器。 影响版本 Apache ActiveMQ 5.18.0 before 5.1…

Windows系统下python版本Open3D-0.18.0 的快速安装与使用

目录 一、安装Anaconda3二、安装open3d三、测试代码四、结果展示五、测试数据 Windows系统下python版本Open3D-0.18.0 的快速安装与使用由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、安装Anaconda…

Hive基础知识(八):Hive对数据库的增删改查操作

1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment]#注释 [LOCATION hdfs_path]#指定当前库的hdfs目录 [WITH DBPROPERTIES (property_nameproperty_value,...)]; #备注创建作者和创建时间 1)创建一个数据库,数据…

【机器学习300问】2、机器学习分为哪几类?

一、监督学习 监督学习(Supervised Learning)是机器学习和人工智能中的一种算法学习训练方式。它利用有标签的数据(通常称为训练数据)作为输入,训练一个模型来学习输入和输出之间的关系。模型学习后可以用于预测新的、…

Linux 常用进阶指令

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 其他…

华为机试真题实战应用【赛题代码篇】-快递投放问题(附Java和C++代码实现)

目录 问题描述 解题思路 代码实现 Java 代码2 C++ 问题描述 有N个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,每个站点间的包裹不重复, 路上有检查站会导致部分货物无法通行

SQL语句中EXISTS的终极指南

SQL语句中EXISTS的终极指南 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨在SQL语句中经常用到的一项强大工具——“EXISTS”&#…

最实用的 8 个免费 Android 数据恢复软件

如果您正在寻找最好的免费 Android 数据恢复软件,那就不用再犹豫了,因为我已经列出了最好的软件。不可否认,智能手机和平板电脑等 Android 设备正在与技术一起发展。与以前相比,它们也更加融入了我们的日常生活。 Android 智能手…

Vue3-45-Pinia-定义全局状态的两种方式

Pinia 的作用介绍 Pinia 是管理 全局状态的工具。 全局状态 : 我的理解,就是一个全局的变量,在项目内,所有的组件都可以使用它,对它进行读写操作。 全局状态的三个核心概念 state : 最核心的,就是变量的定义…

Golang,Gin框架使用ShouldBindJSON时出现EOF报错

前言 做毕设ing,使用的是Gin框架做的一个简单的管理系统。但偶尔也会碰到一些稀奇古怪的Bug,因此记录一下。 问题描述 api是这样写的 func UserRegisterHandler(c *gin.Context, user *usecase.UserOperate) {if err : c.ShouldBindJSON(&UserReg…