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{}的别名。

Go1.18新特性对泛型支持详解

//这里的any并非泛型的约束,而是类型
func test(x any) any {
   return x
}

comparable: 表示go里面所有的内置的可比较类型。

Go1.18新特性对泛型支持详解

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
  • asp之家 网络编程 m.aspxhome.com