成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語(yǔ)言泛型表情包,GO表情包

GO語(yǔ)言(十五):泛型入門(mén)(下)-

在本節(jié)中,您將添加通用函數(shù)調(diào)用的修改版本,進(jìn)行小的更改以簡(jiǎn)化調(diào)用代碼。您將刪除在這種情況下不需要的類(lèi)型參數(shù)。

創(chuàng)新互聯(lián)專(zhuān)注于六枝企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),成都商城網(wǎng)站開(kāi)發(fā)。六枝網(wǎng)站建設(shè)公司,為六枝等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開(kāi)發(fā),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

當(dāng) Go 編譯器可以推斷您要使用的類(lèi)型時(shí),您可以在調(diào)用代碼中省略類(lèi)型參數(shù)。編譯器從函數(shù)參數(shù)的類(lèi)型推斷類(lèi)型參數(shù)。

請(qǐng)注意,這并不總是可能的。例如,如果您需要調(diào)用沒(méi)有參數(shù)的泛型函數(shù),則需要在函數(shù)調(diào)用中包含類(lèi)型參數(shù)。

在 main.go 中,在您已有的代碼下方,粘貼以下代碼。

在此代碼中:

(1)調(diào)用泛型函數(shù),省略類(lèi)型參數(shù)。

從包含 main.go 的目錄中的命令行,運(yùn)行代碼。

接下來(lái),您將通過(guò)將整數(shù)和浮點(diǎn)數(shù)的并集捕獲到您可以重用的類(lèi)型約束(例如從其他代碼中)來(lái)進(jìn)一步簡(jiǎn)化函數(shù)。

正如您將在本節(jié)中看到的,約束接口也可以引用特定類(lèi)型。

1、編寫(xiě)代碼

在此代碼中:

b.在您已有的函數(shù)下方,粘貼以下通用 SumNumbers函數(shù)。

在此代碼中:

c.在 main.go 中,在您已有的代碼下方,粘貼以下代碼。

在此代碼中:

(1)調(diào)用SumNumbers打印每個(gè)map的總和。

與上一節(jié)一樣,在調(diào)用泛型函數(shù)時(shí)省略了類(lèi)型參數(shù)(方括號(hào)中的類(lèi)型名稱(chēng))。Go 編譯器可以從其他參數(shù)推斷類(lèi)型參數(shù)。

從包含 main.go 的目錄中的命令行,運(yùn)行代碼。

做得很好!您剛剛學(xué)習(xí)了 Go 中的泛型。

如何看待go語(yǔ)言泛型的最新設(shè)計(jì)?

Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成為現(xiàn)實(shí)。Go 團(tuán)隊(duì)實(shí)施了一個(gè)看起來(lái)比較穩(wěn)定的設(shè)計(jì)草案,并且正以源到源翻譯器原型的形式獲得關(guān)注。本文講述的是泛型的最新設(shè)計(jì),以及如何自己嘗試泛型。

例子

FIFO Stack

假設(shè)你要?jiǎng)?chuàng)建一個(gè)先進(jìn)先出堆棧。沒(méi)有泛型,你可能會(huì)這樣實(shí)現(xiàn):

type?Stack?[]interface{}func?(s?Stack)?Peek()?interface{}?{

return?s[len(s)-1]

}

func?(s?*Stack)?Pop()?{

*s?=?(*s)[:

len(*s)-1]

}

func?(s?*Stack)?Push(value?interface{})?{

*s?=?

append(*s,?value)

}

但是,這里存在一個(gè)問(wèn)題:每當(dāng)你 Peek 項(xiàng)時(shí),都必須使用類(lèi)型斷言將其從 interface{} 轉(zhuǎn)換為你需要的類(lèi)型。如果你的堆棧是 *MyObject 的堆棧,則意味著很多 s.Peek().(*MyObject)這樣的代碼。這不僅讓人眼花繚亂,而且還可能引發(fā)錯(cuò)誤。比如忘記 * 怎么辦?或者如果您輸入錯(cuò)誤的類(lèi)型怎么辦?s.Push(MyObject{})` 可以順利編譯,而且你可能不會(huì)發(fā)現(xiàn)到自己的錯(cuò)誤,直到它影響到你的整個(gè)服務(wù)為止。

通常,使用 interface{} 是相對(duì)危險(xiǎn)的。使用更多受限制的類(lèi)型總是更安全,因?yàn)榭梢栽诰幾g時(shí)而不是運(yùn)行時(shí)發(fā)現(xiàn)問(wèn)題。

泛型通過(guò)允許類(lèi)型具有類(lèi)型參數(shù)來(lái)解決此問(wèn)題:

type?Stack(type?T)?[]Tfunc?(s?Stack(T))?Peek()?T?{

return?s[len(s)-1]

}

func?(s?*Stack(T))?Pop()?{

*s?=?(*s)[:

len(*s)-1]

}

func?(s?*Stack(T))?Push(value?T)?{

*s?=?

append(*s,?value)

}

這會(huì)向 Stack 添加一個(gè)類(lèi)型參數(shù),從而完全不需要 interface{}?,F(xiàn)在,當(dāng)你使用 Peek() 時(shí),返回的值已經(jīng)是原始類(lèi)型,并且沒(méi)有機(jī)會(huì)返回錯(cuò)誤的值類(lèi)型。這種方式更安全,更容易使用。(譯注:就是看起來(lái)更丑陋,^-^)

此外,泛型代碼通常更易于編譯器優(yōu)化,從而獲得更好的性能(以二進(jìn)制大小為代價(jià))。如果我們對(duì)上面的非泛型代碼和泛型代碼進(jìn)行基準(zhǔn)測(cè)試,我們可以看到區(qū)別:

type?MyObject?struct?{

X?

int

}

var?sink?MyObjectfunc?BenchmarkGo1(b?*testing.B)?{

for?i?:=?0;?i??b.N;?i++?{

var?s?Stack

s.Push(MyObject{})

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek().(MyObject)

}

}

func?BenchmarkGo2(b?*testing.B)?{

for?i?:=?0;?i??b.N;?i++?{

var?s?Stack(MyObject)

s.Push(MyObject{})

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek()

}

}

結(jié)果:

BenchmarkGo1BenchmarkGo1-16?????12837528?????????87.0?ns/op???????48?B/op????????2?allocs/opBenchmarkGo2BenchmarkGo2-16?????28406479?????????41.9?ns/op???????24?B/op????????2?allocs/op

在這種情況下,我們分配更少的內(nèi)存,同時(shí)泛型的速度是非泛型的兩倍。

合約(Contracts)

上面的堆棧示例適用于任何類(lèi)型。但是,在許多情況下,你需要編寫(xiě)僅適用于具有某些特征的類(lèi)型的代碼。例如,你可能希望堆棧要求類(lèi)型實(shí)現(xiàn) String() 函數(shù)

go語(yǔ)言抓包工具有哪些官網(wǎng)

go語(yǔ)言抓包工具的網(wǎng)站:

1,sql2go網(wǎng)。

用于將 sql 語(yǔ)句轉(zhuǎn)換為 golang 的 struct. 使用 ddl 語(yǔ)句即可。

例如對(duì)于創(chuàng)建表的語(yǔ)句: show create table xxx. 將輸出的語(yǔ)句,直接粘貼進(jìn)去就行。

2,toml2go網(wǎng)。

用于將編碼后的 toml 文本轉(zhuǎn)換問(wèn) golang 的 struct。

3,curl2go網(wǎng)。

用來(lái)將 curl 命令轉(zhuǎn)化為具體的 golang 代碼。

4,json2go網(wǎng)。

用于將 json 文本轉(zhuǎn)換為 struct。

5,mysql 轉(zhuǎn) ES 工具網(wǎng)站。

模擬模板的工具,在支持泛型之前,可以考慮使用。7)查看某一個(gè)庫(kù)的依賴(lài)情況,類(lèi)似于 go list 功能。

GO語(yǔ)言簡(jiǎn)介:

Go(又稱(chēng)?Golang)是?Google?的 Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類(lèi)型、編譯型語(yǔ)言。

Go 語(yǔ)言語(yǔ)法與?C?相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style?并發(fā)計(jì)算。

當(dāng)前有兩個(gè)Go編譯器分支,分別為官方編譯器gc和gccgo。官方編譯器在初期使用C寫(xiě)成,后用Go重寫(xiě)從而實(shí)現(xiàn)自舉。Gccgo是一個(gè)使用標(biāo)準(zhǔn)GCC作為后端的Go編譯器。

官方編譯器支持跨平臺(tái)編譯(但不支持CGO),允許將源代碼編譯為可在目標(biāo)系統(tǒng)、架構(gòu)上執(zhí)行的二進(jìn)制文件。

網(wǎng)頁(yè)題目:go語(yǔ)言泛型表情包,GO表情包
當(dāng)前網(wǎng)址:http://jinyejixie.com/article22/hojgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、定制開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣外貿(mào)建站、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
左贡县| 来凤县| 吴旗县| 自贡市| 二连浩特市| 梨树县| 济南市| 鹿邑县| 罗源县| 静安区| 沅江市| 青州市| 咸宁市| 嘉荫县| 孟村| 保靖县| 汕尾市| 孟州市| 沭阳县| 牡丹江市| 武陟县| 革吉县| 北票市| 勐海县| 怀化市| 天水市| 抚州市| 揭西县| 南丹县| 措美县| 明溪县| 达拉特旗| 玉门市| 扎鲁特旗| 东明县| 烟台市| 商洛市| 武威市| 包头市| 吴堡县| 贵港市|