脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go1.18新特性对泛型支持详解

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

2022-10-20 11:53不习惯的习惯变成习惯 Golang

这篇文章主要为大家介绍了Go1.18新特性对泛型支持详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

1、泛型是什么

Go1.18增加了对泛型的支持,泛型是一种独立于使用的特定类型编写代码的方式。现在可以编写函数和类型适用于一组类型集合的任何一种。泛型生命周期只在编译期,旨在开发中减少重复代码的编写。

由于go属于静态强类型语言,例如在比较两个数的大小时,没有泛型的时候,仅仅只是传入类型不一样,我们就要再复制一份一样的函数,如果有了泛型就可以减少这类代码。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//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可能出现的类型,中间用符号|分隔。

?
1
2
3
4
5
6
7
//使用泛型
func GetMaxNumber [T int | int32 ](a, b T) T {
    if a > b {
        return a
    }
    return b
}

2、泛型类型的定义

2.1、声明一个自定义类型

跟声明接口一样,使用 type x interface{}关键字来声明,不过里面的成员方法不再是方法,而是类型,类型之间用符号|隔开。

成员类型支持go中所有的基本类型。

?
1
2
3
type MyT interface {
    int | int8 | int16 | int32 | int64 | []int | map[int]int | struct{}
}

2.2、内置的泛型类型any和comparable

any:表示go里面所有的内置基本类型,等价于interface{},其实就是interface{}的别名。

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

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

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

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

2.3、泛型中的~符号是什么

符号~都是与类型一起出现的,用来表示支持该类型的衍生类型

?
1
2
3
4
5
6
7
//int的衍生类型
type intA int
type intB  = int
//不仅支持int,还支持int的衍生类型intA和intB
type Myint interface {
    ~int | float
}

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

原文链接:https://juejin.cn/post/7108644703167316004

延伸 · 阅读

精彩推荐
  • Golanggolang中的空slice案例

    golang中的空slice案例

    这篇文章主要介绍了golang中的空slice案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    晨梦思雨9752021-06-02
  • Golanggoland 实现websocket server的示例代码

    goland 实现websocket server的示例代码

    本文主要介绍了goland 实现websocket server的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    shw0320111802022-10-13
  • GolangGo语言入门教程之基础语法快速入门

    Go语言入门教程之基础语法快速入门

    这篇文章主要介绍了Go语言入门教程之基础语法快速入门,本文讲解了值类型、变量、常量、循环、条件语句、条件枚举等内容,需要的朋友可以参考下 ...

    junjie4652020-04-10
  • Golang1行Go代码实现反向代理的示例

    1行Go代码实现反向代理的示例

    这篇文章主要介绍了1行Go代码实现反向代理的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    alfred-zhong2182020-05-18
  • GolangGolang 文件操作:删除指定的文件方式

    Golang 文件操作:删除指定的文件方式

    这篇文章主要介绍了Golang 文件操作:删除指定的文件方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    潘广宇 Leo22722021-06-10
  • Golang关于go语言编码需要放到src 文件夹下的问题

    关于go语言编码需要放到src 文件夹下的问题

    这篇文章主要介绍了go语言编码需要放到src 文件夹下的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    朝阳科技大学5242021-01-31
  • GolangGolang的锁机制与使用技巧小结

    Golang的锁机制与使用技巧小结

    本文主要介绍了Golang的锁机制与使用技巧小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    树獭叔叔11992022-10-12
  • Golanggo语言中的二维切片赋值

    go语言中的二维切片赋值

    这篇文章主要介绍了go语言中的二维切片赋值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    kgduu7422021-05-31