返回顶部
首页 > 资讯 > 后端开发 > GO >Go1.18新特性对泛型支持详解
  • 605
分享到

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

2024-04-02 19:04:59 605人浏览 八月长安
摘要

目录1、泛型是什么2、泛型类型的定义2.1、声明一个自定义类型2.2、内置的泛型类型any和comparable2.3、泛型中的~符号是什么1、泛型是什么 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
}

以上就是Go1.18新特性对泛型支持详解的详细内容,更多关于Go1.18新特性支持泛型的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go1.18新特性对泛型支持详解

本文链接: https://lsjlt.com/news/151549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go1.18新特性对泛型支持详解
    目录1、泛型是什么2、泛型类型的定义2.1、声明一个自定义类型2.2、内置的泛型类型any和comparable2.3、泛型中的~符号是什么1、泛型是什么 Go1.18增加了对泛型的...
    99+
    2024-04-02
  • Go1.18新特性之泛型的全面讲解
    目录序1. 一切从函数的形参和实参说起2. Go的泛型3. 类型形参、类型实参、类型约束和泛型类型3.1 其他的泛型类型3.2 类型形参的互相套用3.3 几种语法错误3.4 特殊的泛...
    99+
    2023-03-09
    Golang 泛型使用 Golang 泛型 Go 泛型
  • Go1.18新特性之泛型怎么使用
    本篇内容主要讲解“Go1.18新特性之泛型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go1.18新特性之泛型怎么使用”吧!01 Go中的泛型是什么众所周知,Go是一门静态类型的语言。...
    99+
    2023-06-30
  • Go1.18新特性之泛型实例代码分析
    本篇内容主要讲解“Go1.18新特性之泛型实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go1.18新特性之泛型实例代码分析”吧!1. 一切从函数的形参和实参说起假设我们有个计算两数...
    99+
    2023-07-05
  • Go1.18新特性工作区模糊测试及泛型的使用详解
    目录前言Go工作区模式(Go Workspace Mode)现实的情况多仓库同时开发多个新仓库开始开发工作区模式是什么推荐的使用方法使用时的注意点Go模糊测试(Go Fuzzing ...
    99+
    2024-04-02
  • Go1.18新特性之泛型使用三步曲(小结)
    目录01 Go中的泛型是什么1.1 传统的函数编写方式1.2 泛型函数编写方式02 从泛型被加入之前说起2.1 针对每一种类型编写一套重复的代码2.2 使用空接口并通过类型断言来判定...
    99+
    2024-04-02
  • Go1.18新特性使用Generics泛型进行流式处理
    前言 Stream 是一个基于 Go 1.18+ 泛型的流式处理库, 它支持并行处理流中的数据. 并行流会将元素平均划分多个的分区, 并创建相同数量的 goroutine 执行, 并...
    99+
    2024-04-02
  • Golang 新特性研究:泛型支持的未来展望
    标题:Golang 新特性研究:泛型支持的未来展望 随着技术的不断发展,各种编程语言也在不断更新和完善自身的特性以满足不同的需求。作为一门备受开发者喜爱的编程语言,Golang(Go语...
    99+
    2024-03-05
    golang 未来 泛型 go语言
  • C++实现支持泛型的LFU详解
    首先定义LFU存储数据节点ListNode的结构, 此结构支持键K和值V的模板,为了在有序元素中实现比较(严格小于),这里需要重载小于号,如果此数据的使用频次最少,则小于结果为tru...
    99+
    2024-04-02
  • JDK5.0新特性的泛型怎么理解
    本篇文章给大家分享的是有关JDK5.0新特性的泛型怎么理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。没有参数的情况下使用泛型    既然在J2SE 5....
    99+
    2023-06-03
  • PHP 8 新特性:增加了对 meta 的支持
    随着互联网技术的不断发展,PHP语言也不断地进行更新和改进。当前,PHP8已经发布了,其中包含了很多有意思的新特性。其中一项最值得关注的新特性就是增加了对 meta的支持。在本文中,我...
    99+
    2024-04-02
  • 新特性解读 | MySQL 8.0.19 支持 DNS SRV
    MySQL Router 是 InnoDB Cluster 架构的访问入口,在架构部署上,官方给出的建议是 router 与应用端绑定部署,避免 router 单点问题。 之前还有客户咨询,能否 router 不与应用端绑定部署,不便于部...
    99+
    2019-02-10
    新特性解读 | MySQL 8.0.19 支持 DNS SRV
  • Rust指南之泛型与特性详解
    目录前言1、泛型1.1、在函数中定义泛型1.2、结构体中的泛型1.3、枚举类中的泛型1.4、方法中的泛型2、特性2.1、默认特性2.2、特性做参数2.3、特性做返回值前言 在上篇Ru...
    99+
    2024-04-02
  • JDK5.0新特性的学习--泛型(上)
    没有泛型的日子 所有的java类都源自java.lang.Object,这意味着所有的JAVA对象能转换成Object。因此,在之前的JDK的版本中,很多集合框架的函数接受一个Object参数。所以,collections是一个能持...
    99+
    2023-06-03
  • Golang 泛型探秘:支持与局限性分析
    Golang 泛型探秘:支持与局限性分析 一、引言 随着 Go 语言的不断发展,社区对于泛型的需求也日益增大。在过去的几年间,Golang 社区一直在讨论是否应该为 Go 添加泛型支持...
    99+
    2024-03-05
    安全 灵活 延时 go语言
  • Java9新特性对HTTP2协议支持与非阻塞HTTP API
    目录一、HTTP/2简介HTTP/2数据推送目前支持 HTTP/2 的 Java HTTP 客户端二、Java 9 的 HTTP/2 客户端在阻塞模式下发送请求以非阻塞模式发送请求(...
    99+
    2024-04-02
  • MySQL8.0新特性——支持原子DDL语句
       MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即...
    99+
    2024-04-02
  • 如何使用泛型为golang添加新特性
    go 中泛型允许创建适用于多种数据类型的代码。语法为 type name[t any] struct { ... },其中 t 为泛型参数。使用 func copyslice[t any...
    99+
    2024-05-02
    golang 泛型
  • Go语言泛型解读:它的泛型特性到底如何?
    Go语言是一种快速、简单、安全的编程语言,被广泛应用于各种领域。在过去的版本中,Go语言一直以“没有泛型”而著称,但是随着Go 1.18版本的发布,引入了长期期待的泛型特性,这是Go语...
    99+
    2024-03-15
    go语言 泛型 解读
  • JDK 新特性篇:JDK 8 新特性详解
    Java8新特性简介 Java 8 (又称为 JDK 1.8) 是 Java 语言开发的一个主要版本。Java 8 是 Oracle 公司于 2014 年 3 月发布,可以看成是自 Java 5 以来最具革命性的版本。Java 8 为 J...
    99+
    2023-09-12
    java jvm 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作