Go 泛型主要设计者介绍使用泛型的最佳时机

开发
近日Go 泛型主要设计者 Ian Lance Taylor在 Go 官方博客发表了自己 2021 年的演讲——《When To Use Generics》,来介绍使用 Go 泛型的最佳时机。

近期一篇主题为“Go 泛型导致代码运行速度变慢”的文章引起了广泛讨论。因为 Go 开发者对“泛型”这项特性期盼已久,但最后却发现有所落差。

Go 泛型主要设计者 Ian Lance Taylor 也留意到了相关的讨论,于是近日他在 Go 官方博客发表了自己 2021 年的演讲——《When To Use Generics》,来介绍使用 Go 泛型的最佳时机。

上文提到的文章指出,从历史上看,C++、D 乃至 Rust 等系统语言一直采用单态化方法实现泛型。然而,Go 1.18 的泛型实现并不完全依靠单态化 (Monomorphization),而是采用了一种被称为"GCShape stenciling with Dictionaries"的部分单态化技术。这种方法的好处是可以大幅减少代码量,但在特定情况下,会导致代码速度变慢。

Ian Lance Taylor 表示,Go 的通用开发准则有要求:开发者应通过编写代码而不是定义类型来编写 Go 程序。当涉及到泛型时,如果通过定义类型参数约束来编写程序,那一开始就走错了路。正解应该是从编写函数开始,当明确了类型参数的作用后,再添加类型参数就很容易了。

接着,Ian 列举了 4 种类型参数能有效发挥作用的情况:

  • 使用语言定义的特殊容器类型
  • 通用数据结构
  • 类型参数首选是函数,而非方法的情况
  • 不同类型需要实现通用方法

同时也提醒了不适合使用类型参数的情况:

  • 不要使用类型参数替换接口类型 (Interface Type)
  • 如果方法实现不同,不要使用类型参数
  • 在适当的地方使用反射 (reflection)

最后,Ian 给出了简要的泛型使用方针,当开发者发现自己多次编写完全相同的代码,而这些副本之间的唯一区别仅在于使用了不同类型,这时候便可以考虑使用类型参数。换句话说,即开发者应避免使用类型参数,直到发现自己要多次编写完全相同的代码。

本文转自OSCHINA

本文标题:Go 泛型主要设计者介绍使用泛型的最佳时机

本文地址:https://www.oschina.net/news/191309/when-generics

责任编辑:未丽燕 来源: 开源中国
相关推荐

2021-09-29 18:17:30

Go泛型语言

2022-03-28 13:34:26

Go泛型部署泛型

2022-05-06 09:22:25

Go泛型

2023-11-29 08:19:45

Go泛型缺陷

2023-11-03 14:02:04

Go切片泛型库

2021-11-27 22:20:13

SlicesGo泛型

2009-08-07 17:09:11

CLR泛型

2021-12-15 10:23:56

Go 1.18 Bet语言泛型

2021-12-05 23:45:23

Go泛型Maps

2011-07-12 16:00:39

java泛型

2009-09-01 16:14:11

C#泛型

2024-01-09 09:27:57

Rust编程泛型

2009-05-27 10:12:27

LINQ泛型字典Dictionary

2021-06-17 06:51:32

Java泛型Java编程

2009-04-24 09:33:12

LINQ查询非泛型

2023-01-05 17:13:28

TypeScript泛型组件

2021-11-01 12:41:39

Go

2021-12-28 07:20:44

泛型Go场景

2009-09-25 10:03:51

Java泛型

2022-03-29 11:48:40

Go泛型测试
点赞
收藏

51CTO技术栈公众号