Go1.18新特性对泛型支持详解
作者:不习惯的习惯变成习惯 发布时间:2024-05-22 17:46:25
标签:Go1.18,新特性,泛型
1、泛型是什么
Go1.18增加了对泛型的支持,泛型是一种独立于使用的特定类型编写代码的方式。现在可以编写函数和类型适用于一组类型集合的任何一种。泛型生命周期只在编译期,旨在开发中减少重复代码的编写。
由于go属于静态强类型语言,例如在比较两个数的大小时,没有泛型的时候,仅仅只是传入类型不一样,我们就要再复制一份一样的函数,如果有了泛型就可以减少这类代码。
//int
func GetMaxNumber(a, b int) int {
if a > b {
return a
}
return b
}
//int32
func GetMaxNumber(a, b int32) int32 {
if a > b {
return a
}
return b
}
go1.18后引入泛型后,只需要再函数后用中括号声明T可能出现的类型,中间用符号|分隔。
//使用泛型
func GetMaxNumber [T int | int32 ](a, b T) T {
if a > b {
return a
}
return b
}
2、泛型类型的定义
2.1、声明一个自定义类型
跟声明接口一样,使用 type x interface{}关键字来声明,不过里面的成员方法不再是方法,而是类型,类型之间用符号|隔开。
成员类型支持go中所有的基本类型。
type MyT interface {
int | int8 | int16 | int32 | int64 | []int | map[int]int | struct{}
}
2.2、内置的泛型类型any和comparable
any
:表示go里面所有的内置基本类型,等价于interface{},其实就是interface{}的别名。
//这里的any并非泛型的约束,而是类型
func test(x any) any {
return x
}
comparable
: 表示go里面所有的内置的可比较类型。
2.3、泛型中的~符号是什么
符号~都是与类型一起出现的,用来表示支持该类型的衍生类型
//int的衍生类型
type intA int
type intB = int
//不仅支持int,还支持int的衍生类型intA和intB
type Myint interface {
~int | float
}
来源:https://juejin.cn/post/7108644703167316004


猜你喜欢
- 所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算。
- zip()的作用先看一下语法:zip(iter1 [,iter2 [...]]) —> zip objectPython的内置help
- 总结了一下使用Python对xml文件的解析,用到的模块儿如下:分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定
- PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传
- 1. 文件的读写原理:文件的读写称为I/O操作。操作原理:.py文件是用解释器去运行,调用OS操作系统的资源,去操作磁盘上的文件。操作流程:
- 大凡人世间的痛苦,多是因放不下有时候我常想,痛苦,该是时光刮给生命的一场飓风吧生活,本就是以这样一种特别的方式,掀起遮盖的一切,让你看到人生
- Go的error比较灵活.但是自身对error处理的机制有不太好用,我们可以自定义错误输出:只要所有实现了Error()方法的对象都可以,
- 视图在django中,视图对WEB请求进行回应视图接收reqeust对象作为第一个参数,包含了请求的信息视图就是一个Python函数,被定义
- 背景学习 Python 的话,仅掌握标准库是远不够的,有很多好用的第三方库我们也需要用到的,比如,由鼎鼎大名的 K 神开发的爬虫必不可少的
- 在程序中,经常需要将⼀组(通常是同为某个类型的)数据元素作为整体 管理和使⽤,需要创建这种元素组,⽤变量记录它们,传进传出函数等。 ⼀组数据
- 效果图from wxpyimport *import requestsfrom datetimeimport datetimeimport
- (5)SELECT (5-2) DISTINCT(5-3)TOP(<top_specification>)(5-1) <s
- 近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉
- 本文实例讲述了JS自定义混合Mixin函数。分享给大家供大家参考,具体如下:<script type="text/javas
- 一、生成随机的测验试卷文件假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋, 你
- 如何发送一个XMLHttpRequest的检索的特定部分HTML标题数据。<html> <head> <tit
- 目录产生背景(已经有了存储过程,为什么还要使用自定义函数)发展历史构成使用方法适用范围注意事项疑问 内容产生背景(已经有了存储过程,为什么还
- # 建表CREATE TABLE `T_TEST` ( `Id` int(11) NOT NULL AUTO_INCREMENT
- 在我们制作网页的时候会经常碰到一些需求,如果不知道方法,说不定会困扰我们半天。其实实现它们都很简单,下面我们就一起来看看这些常用的网页编辑方
- 1、PHP加密解密PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加