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

十分钟了解 Golang 泛型

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

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

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

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

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

一、前置条件

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

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

二、概述

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top