当前位置:首页 > 科技  > 软件

十分钟了解 Golang 泛型

来源: 责编: 时间:2024-06-19 15:36:46 60观看
导读可能有人会觉得Go泛型很难,因此想要借鉴其他语言(比如Java、NodeJS)的泛型实践。事实上Go泛型很容易学,本文希望能帮助读者更好的理解Go泛型。注:本文不会将 Go 泛型与其他语言的泛型实现进行比较,但会帮助你理解 Go 泛型元

可能有人会觉得Go泛型很难,因此想要借鉴其他语言(比如Java、NodeJS)的泛型实践。事实上Go泛型很容易学,本文希望能帮助读者更好的理解Go泛型。Vto28资讯网——每日最新资讯28at.com

注:本文不会将 Go 泛型与其他语言的泛型实现进行比较,但会帮助你理解 Go 泛型元素背后的上下文、结构及其原理。Vto28资讯网——每日最新资讯28at.com

Vto28资讯网——每日最新资讯28at.com

Vto28资讯网——每日最新资讯28at.com

一、前置条件

要编写本文中的示例代码,需要:Vto28资讯网——每日最新资讯28at.com

  • 在计算机上安装 Go 1.18+
  • 对Golang结构、类型、函数和方法有最低限度的了解

二、概述

在 2020 年之前,Go泛型既是风险也是机遇。Vto28资讯网——每日最新资讯28at.com

当 Go 泛型在 2009 年左右被首次提出时(当时该编程语言已经公开),该特性是 Go 语言的主要弱点之一(Go 团队调查发现)。Vto28资讯网——每日最新资讯28at.com

此后,Go 团队在 Go 草案设计中接受了许多泛型实现,并在 Go 1.18 版本[2]中首次引入了泛型。Vto28资讯网——每日最新资讯28at.com

Vto28资讯网——每日最新资讯28at.com

Go 博客 2020 调查结果Vto28资讯网——每日最新资讯28at.com

Go 2020 调查显示,自 Go 语言诞生以来,Go 社区一直要求引入泛型功能。Vto28资讯网——每日最新资讯28at.com

Go 开发人员(以及 Go 团队成员)看到这一缺陷阻碍了 Go 语言的发展,同时,如果得到修复,Go将具有更大的灵活性和性能。Vto28资讯网——每日最新资讯28at.com

1.什么是程序设计中的泛型?

根据维基百科[3]的解释,泛型编程是一种计算机编程风格,在这种编程风格中,算法的具体类型可以在以后指定。Vto28资讯网——每日最新资讯28at.com

简单解释一下:泛型是一种可以与多种类型结合使用的类型,泛型函数是一种可以与多种类型结合使用的函数。Vto28资讯网——每日最新资讯28at.com

☝️ 简单提一下:尽管"泛型"在过去和现在都可以通过 interface{}、反射包或代码生成器在 Go 中实现,但还是要提一下在使用这三种方法之前需要仔细考虑。Vto28资讯网——每日最新资讯28at.com

Vto28资讯网——每日最新资讯28at.com

为了帮助我们以实用的方式理解和学习 Go 泛型,我们将在本文稍后部分提供示例代码。Vto28资讯网——每日最新资讯28at.com

但要知道,既然 Go 泛型已经可用,就可以消除模板代码,不必担心向后兼容问题,同时还能编写可重用、类型安全和可维护的代码。Vto28资讯网——每日最新资讯28at.com

2.那么......为什么需要 Go 泛型?

简而言之,最多可提高 20% 性能。Vto28资讯网——每日最新资讯28at.com

根据 Go 博客的描述,Go 泛型为 Go 语言增加了三个主要组件:Vto28资讯网——每日最新资讯28at.com

  • 函数和类型的类型参数。
  • 将接口类型定义为类型集,包括没有方法的类型。
  • 类型推导,允许在调用函数时省略类型参数。

3.在 Go 1.18 之前没有这种功能吗?

从技术上讲,早在 Go 泛型发布之前,Go 就有一些处理"泛型"的方法:Vto28资讯网——每日最新资讯28at.com

  • 使用"泛型"代码生成器生成 Go 软件包,如 https://github.com/cheekybits/genny[4]
  • 使用带有switch语句和类型转换的接口
  • 使用带有参数验证的反射软件包

然而,与正式的Go泛型相比,这些方法还远远不够,有如下缺点:Vto28资讯网——每日最新资讯28at.com

  • 使用类型switch和转换时性能较低
  • 类型安全损耗:接口和反射不是类型安全的,这意味着代码可能会传递任何类型,而这些类型在编译过程中会被忽略,从而在运行时引起panic。
  • Go 项目构建更复杂,编译时间更长
  • 可能需要对调用代码和函数代码进行类型断言
  • 缺乏对自定义派生类型的支持
  • 代码可读性差(使用反射时更明显)

本文链接:http://www.28at.com/showinfo-26-94852-0.html十分钟了解 Golang 泛型

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 赶紧试试 Python 3.12 吧,真的好用

下一篇: 如何应对Spring框架有三个主要陷阱

标签:
  • 热门焦点
Top