Golang Go语言中全面介绍Go1.18泛型的文章,可能是目前介绍泛型最详细的文章之一

发布于 1周前 作者 bupafengyu 来自 Go语言

断断续续花了我一个多星期时间才写完,可以说是写得挺慢了,但也因此把目前泛型从里到外各种细节也都囊括了进去(如果仍有遗漏地话欢迎指出)

至于为什么要写这文章,这里摘抄下原文的序章:

2022 年 3 月 15 日,争议非常大但同时也备受期待的泛型终于伴随着 Go1.18 发布了。

可是因为 Go 对泛型的支持时间跨度太大,有非常多的以“泛型”为关键字的文章都是在介绍 Go1.18 之前的旧泛型提案或者设计。而很多设计最终在 Go1.18 中被废弃或发生了更改。并且很多介绍 Go1.18 泛型的文章(包括官方的)都过于简单,并没对 Go 的泛型做完整的介绍,也没让大家意识到这次 Go 引入泛型给语言增加了多少复杂度(当然也可能单纯是我没搜到更好的文章)

出于这些原因,我决定参考 The Go Programming Language Specification ,写一篇比较完整系统介绍 Go1.18 泛型的文章。这篇文章可能是目前介绍 Go 泛型比较全面的文章之一了

因为我实在是懒得维护个人博客(手上一堆 vps 和一个独服但没那心思去打理),所以文章选择发在博客平台了,今后有文章也会发在各种平台上(博客园似乎也挺不错得,今后会考虑做一个备选的归档库):

https://juejin.cn/post/7080938405449695268

https://segmentfault.com/a/1190000041634906

欢迎大家指点~


Golang Go语言中全面介绍Go1.18泛型的文章,可能是目前介绍泛型最详细的文章之一

更多关于Golang Go语言中全面介绍Go1.18泛型的文章,可能是目前介绍泛型最详细的文章之一的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

15 回复

学习了

更多关于Golang Go语言中全面介绍Go1.18泛型的文章,可能是目前介绍泛型最详细的文章之一的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


大佬,有比较好的 go 的教程么,目前做 java 开发,想学习一下 go

。。。看到这个贴子前,我竟然已经在看 sf 里的文章了

我是看的 the way to go ,有别的语言基础的话应该很快就能看上手了。有了基础就是写点项目然后遇到不会的直接搜对应的文章就行了。

the way to go 有中文:

https://github.com/unknwon/the-way-to-go_ZH_CN

仔细看了前面一些,写得挺好的加油

写的很棒,谢谢分享

抓个虫,掘金上的文章
type WowStruct[int, []int] struct {
Data []iont
MaxValue int
MinValue int
}
iont 应该是 int

感谢分享,对于从没接触过泛型的我很友好。

多谢指点,虽然已经修正过一遍了但似乎还有点虫子和措辞的问题,晚上会再次修改一遍~

4.2 动态判断变量的类型 这一节在参数前面用 any 或者 interface 转一下就可以断言了

if _, ok := any(arg).(string); ok {
}

写的很详细,好文章~

op 现在工作用 go 了?

Golang Go语言Go1.18泛型全面介绍

Go1.18引入了泛型,这一特性极大地提升了代码的复用性和灵活性。泛型允许开发者编写独立于具体类型的代码,从而避免了为每种类型重复编写相同逻辑的问题。

在Go1.18中,泛型通过类型参数和类型约束来实现。类型参数用于在函数、结构体或类型中定义可以接受任意类型的变量,而类型约束则用于限制这些变量的行为。例如,可以使用constraints.Ordered来约束一个类型必须支持比较操作。

泛型的语法非常简单,它使用方括号[]来定义类型参数。在函数定义中,类型参数列表紧跟在函数名之后,并用方括号括起来。在调用泛型函数时,Go编译器会自动推断类型参数,当然也可以显式指定。

Go的泛型还支持类型集合和类型推断。类型集合允许开发者定义一组类型,而类型推断则允许编译器在调用泛型函数时自动推断出类型参数的具体类型。

在实际应用中,泛型可以用于构建各种数据结构,如二叉查找树、链表等。通过为这些数据结构定义泛型版本,可以使其支持任意类型的元素,从而提高了代码的可重用性。

此外,Go的泛型还提供了丰富的预定义约束类型,如any(相当于interface{})、comparable、Integer和Float等,这些约束类型使得开发者可以更加方便地定义和使用泛型。

总的来说,Go1.18的泛型特性为Go语言带来了强大的新功能,使得开发者可以编写更加简洁、通用和灵活的代码。了解并掌握泛型的使用方法是提高Go语言编程能力的重要一步。

回到顶部