Go1.18新特性对泛型支持详解
作者:不习惯的习惯变成习惯 时间:2024-05-22 17:46:25
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
标签:Go1.18,新特性,泛型
0
投稿
猜你喜欢
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2023-08-29 17:16:11
vuex state及mapState的基础用法详解
2024-05-13 09:07:23
python批量下载网站马拉松照片的完整步骤
2023-08-31 19:00:27
Django中login_required装饰器的深入介绍
2023-08-22 09:18:28
Python原始字符串(raw strings)用法实例
2021-05-04 18:29:27
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2024-04-23 09:11:38
opencv转换颜色空间更改图片背景
2023-12-20 19:01:29
windows 64位下mysql8.0.25安装配置教程(最详细!)
2024-01-22 17:36:27
perl比较两个文件字符串的实例代码
2023-02-15 15:40:18
Python入门学习之类的相关知识总结
2021-12-18 10:02:38
GO语言延迟函数defer用法详解
2024-02-18 16:56:27
php7 图形用户界面GUI 开发示例
2023-09-12 03:16:50
Python 机器学习之线性回归详解分析
2023-08-12 09:48:13
Python实现读取文件的方法总结
2021-05-04 00:56:26
Pytorch 实现自定义参数层的例子
2023-01-27 22:00:06
pyqt5-tools安装失败的详细处理方法
2021-08-22 21:34:00
Python Mysql自动备份脚本
2024-01-16 00:57:46
ASP中3种分页显示的性能比较
2007-08-15 13:37:00
神经网络(BP)算法Python实现及应用
2021-11-12 20:00:14
SQL Server约束增强的两点建议
2024-01-28 04:43:10