AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

十分鐘了解 Golang 泛型

來源: 責編: 時間:2024-06-19 15:36:46 116觀看
導讀可能有人會覺得Go泛型很難,因此想要借鑒其他語言(比如Java、NodeJS)的泛型實踐。事實上Go泛型很容易學,本文希望能幫助讀者更好的理解Go泛型。注:本文不會將 Go 泛型與其他語言的泛型實現進行比較,但會幫助你理解 Go 泛型元

可能有人會覺得Go泛型很難,因此想要借鑒其他語言(比如Java、NodeJS)的泛型實踐。事實上Go泛型很容易學,本文希望能幫助讀者更好的理解Go泛型。Kgo28資訊網——每日最新資訊28at.com

注:本文不會將 Go 泛型與其他語言的泛型實現進行比較,但會幫助你理解 Go 泛型元素背后的上下文、結構及其原理。Kgo28資訊網——每日最新資訊28at.com

Kgo28資訊網——每日最新資訊28at.com

Kgo28資訊網——每日最新資訊28at.com

一、前置條件

要編寫本文中的示例代碼,需要:Kgo28資訊網——每日最新資訊28at.com

  • 在計算機上安裝 Go 1.18+
  • 對Golang結構、類型、函數和方法有最低限度的了解

二、概述

在 2020 年之前,Go泛型既是風險也是機遇。Kgo28資訊網——每日最新資訊28at.com

當 Go 泛型在 2009 年左右被首次提出時(當時該編程語言已經公開),該特性是 Go 語言的主要弱點之一(Go 團隊調查發現)。Kgo28資訊網——每日最新資訊28at.com

此后,Go 團隊在 Go 草案設計中接受了許多泛型實現,并在 Go 1.18 版本[2]中首次引入了泛型。Kgo28資訊網——每日最新資訊28at.com

Kgo28資訊網——每日最新資訊28at.com

Go 博客 2020 調查結果Kgo28資訊網——每日最新資訊28at.com

Go 2020 調查顯示,自 Go 語言誕生以來,Go 社區一直要求引入泛型功能。Kgo28資訊網——每日最新資訊28at.com

Go 開發人員(以及 Go 團隊成員)看到這一缺陷阻礙了 Go 語言的發展,同時,如果得到修復,Go將具有更大的靈活性和性能。Kgo28資訊網——每日最新資訊28at.com

1.什么是程序設計中的泛型?

根據維基百科[3]的解釋,泛型編程是一種計算機編程風格,在這種編程風格中,算法的具體類型可以在以后指定。Kgo28資訊網——每日最新資訊28at.com

簡單解釋一下:泛型是一種可以與多種類型結合使用的類型,泛型函數是一種可以與多種類型結合使用的函數。Kgo28資訊網——每日最新資訊28at.com

?? 簡單提一下:盡管"泛型"在過去和現在都可以通過 interface{}、反射包或代碼生成器在 Go 中實現,但還是要提一下在使用這三種方法之前需要仔細考慮。Kgo28資訊網——每日最新資訊28at.com

Kgo28資訊網——每日最新資訊28at.com

為了幫助我們以實用的方式理解和學習 Go 泛型,我們將在本文稍后部分提供示例代碼。Kgo28資訊網——每日最新資訊28at.com

但要知道,既然 Go 泛型已經可用,就可以消除模板代碼,不必擔心向后兼容問題,同時還能編寫可重用、類型安全和可維護的代碼。Kgo28資訊網——每日最新資訊28at.com

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

簡而言之,最多可提高 20% 性能。Kgo28資訊網——每日最新資訊28at.com

根據 Go 博客的描述,Go 泛型為 Go 語言增加了三個主要組件:Kgo28資訊網——每日最新資訊28at.com

  • 函數和類型的類型參數。
  • 將接口類型定義為類型集,包括沒有方法的類型。
  • 類型推導,允許在調用函數時省略類型參數。

3.在 Go 1.18 之前沒有這種功能嗎?

從技術上講,早在 Go 泛型發布之前,Go 就有一些處理"泛型"的方法:Kgo28資訊網——每日最新資訊28at.com

  • 使用"泛型"代碼生成器生成 Go 軟件包,如 https://github.com/cheekybits/genny[4]
  • 使用帶有switch語句和類型轉換的接口
  • 使用帶有參數驗證的反射軟件包

然而,與正式的Go泛型相比,這些方法還遠遠不夠,有如下缺點:Kgo28資訊網——每日最新資訊28at.com

  • 使用類型switch和轉換時性能較低
  • 類型安全損耗:接口和反射不是類型安全的,這意味著代碼可能會傳遞任何類型,而這些類型在編譯過程中會被忽略,從而在運行時引起panic。
  • Go 項目構建更復雜,編譯時間更長
  • 可能需要對調用代碼和函數代碼進行類型斷言
  • 缺乏對自定義派生類型的支持
  • 代碼可讀性差(使用反射時更明顯)

本文鏈接:http://www.tebozhan.com/showinfo-26-94852-0.html十分鐘了解 Golang 泛型

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 趕緊試試 Python 3.12 吧,真的好用

下一篇: 如何應對Spring框架有三個主要陷阱

標簽:
  • 熱門焦點
Top