日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Go語言之父介紹泛型

▲ 左:Go 語言設計者之一 Robert Griesemer;右:Go 泛型主要設計者 Ian Lance Taylor

武陟ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

不久前正式發(fā)布的 Go 1.18 添加了對泛型的支持,據(jù)稱泛型是 Go 開源以來所做的最大改變。泛型是一種編程范式,這種范式獨立于所使用的特定類型,泛型允許在函數(shù)和類型的實現(xiàn)中使用某個類型集合中的任何一種類型。

泛型為 Go 添加了三個新的重要內(nèi)容:

  • 面向函數(shù)和類型的“類型形參” (type parameters)
  • 將接口類型定義為類型集合,包括沒有方法的接口類型
  • 類型推斷:在大多數(shù)情況下,在調(diào)用泛型函數(shù)時可省略“類型實參” (type arguments)

Type Parameters

現(xiàn)在函數(shù)和類型都具有類型形參” (type parameters),類型形參列表看起來就是一個普通的參數(shù)列表,除了它使用的是方括號而不是小括號。

先從浮點值的基本非泛型 Min 函數(shù)開始:

func Min(x, y float64) float64 {
if x < y {
return x
}
return y
}

通過添加類型形參列表來使這個函數(shù)泛型化——使其適用于不同的類型。在此示例中,添加了一個帶有單個類型形參T的類型參數(shù)列表,并替換了float64。

import "golang.org/x/exp/constraints"
func GMin[T constraints.Ordered](x, y T) T {
if x < y {
return x
}
return y
}

然后就可以使用類型實參調(diào)用此函數(shù):

x := GMin[int](2, 3)

向GMin提供類型參數(shù),在這種情況下int稱為實例化。實例化分兩步進行。首先,編譯器在泛型函數(shù)或泛型類型中用所有類型形參替換它們各自的類型實參。然后,編譯器驗證每個類型形參是否滿足各自的約束。如果第二步失敗,實例化就會失敗并且程序無效。

成功實例化后,即可產(chǎn)生非泛型函數(shù),它可以像任何其他函數(shù)一樣被調(diào)用。比如:

fmin := GMin[float64]
m := fmin(2.71, 3.14)

GMin[float64]的實例化產(chǎn)生了一個與Min函數(shù)等效的函數(shù),可以在函數(shù)調(diào)用中使用它。類型形參也可以與類型一起使用。

type Tree[T interface{}] struct {
left, right *Tree[T]
value T
}

func (t *Tree[T]) Lookup(x T) *Tree[T] { ... }

var stringTree Tree[string]

在上面的例子中,泛型類型Tree存儲了類型形參T的值。泛型類型也可以有方法,比如本例中的Lookup。為了使用泛型類型,它必須被實例化;Tree[string]是使用類型實參string來實例化Tree的示例。

類型推斷

此項功能是最復雜的變更,主要包括:

  • 函數(shù)參數(shù)類型推斷 (Function argument type inference)
  • 約束類型推斷 (Constraint type inference)

雖然類型推斷的工作原理細節(jié)很復雜,但使用它并不復雜:類型推斷要么成功,要么失敗。如果它成功,類型實參可以被省略,調(diào)用泛型函數(shù)看起來與調(diào)用普通函數(shù)沒有什么不同。如果類型推斷失敗,編譯器將給出錯誤消息,在這種情況下,只需提供必要的類型實參。

泛型是 Go 1.18 的重要新語言特性,Robert Griesemer 和 Ian Lance Taylor 表示,這個功能實現(xiàn)得很好并且質(zhì)量很高。雖然他們鼓勵在有必要的場景中使用泛型,但在生產(chǎn)環(huán)境中部署泛型代碼時,請務必謹慎。

本文轉(zhuǎn)自OSCHINA

本文標題:Go 語言之父介紹泛型

本文地址:https://www.oschina.net/news/188448/intro-go-generics

資訊來源:https://go.dev/blog/intro-generics


當前文章:Go語言之父介紹泛型
本文路徑:http://www.5511xx.com/article/dpdcgss.html