自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 泛型主要設(shè)計者介紹使用泛型的最佳時機

開發(fā)
近日Go 泛型主要設(shè)計者 Ian Lance Taylor在 Go 官方博客發(fā)表了自己 2021 年的演講——《When To Use Generics》,來介紹使用 Go 泛型的最佳時機。

近期一篇主題為“Go 泛型導致代碼運行速度變慢”的文章引起了廣泛討論。因為 Go 開發(fā)者對“泛型”這項特性期盼已久,但最后卻發(fā)現(xiàn)有所落差。

Go 泛型主要設(shè)計者 Ian Lance Taylor 也留意到了相關(guān)的討論,于是近日他在 Go 官方博客發(fā)表了自己 2021 年的演講——《When To Use Generics》,來介紹使用 Go 泛型的最佳時機。

上文提到的文章指出,從歷史上看,C++、D 乃至 Rust 等系統(tǒng)語言一直采用單態(tài)化方法實現(xiàn)泛型。然而,Go 1.18 的泛型實現(xiàn)并不完全依靠單態(tài)化 (Monomorphization),而是采用了一種被稱為"GCShape stenciling with Dictionaries"的部分單態(tài)化技術(shù)。這種方法的好處是可以大幅減少代碼量,但在特定情況下,會導致代碼速度變慢。

Ian Lance Taylor 表示,Go 的通用開發(fā)準則有要求:開發(fā)者應(yīng)通過編寫代碼而不是定義類型來編寫 Go 程序。當涉及到泛型時,如果通過定義類型參數(shù)約束來編寫程序,那一開始就走錯了路。正解應(yīng)該是從編寫函數(shù)開始,當明確了類型參數(shù)的作用后,再添加類型參數(shù)就很容易了。

接著,Ian 列舉了 4 種類型參數(shù)能有效發(fā)揮作用的情況:

  • 使用語言定義的特殊容器類型
  • 通用數(shù)據(jù)結(jié)構(gòu)
  • 類型參數(shù)首選是函數(shù),而非方法的情況
  • 不同類型需要實現(xiàn)通用方法

同時也提醒了不適合使用類型參數(shù)的情況:

  • 不要使用類型參數(shù)替換接口類型 (Interface Type)
  • 如果方法實現(xiàn)不同,不要使用類型參數(shù)
  • 在適當?shù)牡胤绞褂梅瓷?(reflection)

最后,Ian 給出了簡要的泛型使用方針,當開發(fā)者發(fā)現(xiàn)自己多次編寫完全相同的代碼,而這些副本之間的唯一區(qū)別僅在于使用了不同類型,這時候便可以考慮使用類型參數(shù)。換句話說,即開發(fā)者應(yīng)避免使用類型參數(shù),直到發(fā)現(xiàn)自己要多次編寫完全相同的代碼。

本文轉(zhuǎn)自O(shè)SCHINA

本文標題:Go 泛型主要設(shè)計者介紹使用泛型的最佳時機

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

責任編輯:未麗燕 來源: 開源中國
相關(guān)推薦

2021-09-29 18:17:30

Go泛型語言

2022-03-28 13:34:26

Go泛型部署泛型

2024-10-28 00:40:49

Go語法版本

2022-05-06 09:22:25

Go泛型

2023-11-29 08:19:45

Go泛型缺陷

2021-11-27 22:20:13

SlicesGo泛型

2023-11-03 14:02:04

Go切片泛型庫

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

2024-10-14 08:31:41

泛型策略模式

2022-01-05 07:07:37

Go核心設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號