内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

go語(yǔ)言全組合套娃的簡(jiǎn)單介紹

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

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

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)的成都網(wǎng)站建設(shè)公司,我們專(zhuān)注網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、網(wǎng)絡(luò)營(yíng)銷(xiāo)、企業(yè)網(wǎng)站建設(shè),外鏈,廣告投放為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。

例子

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{}。現(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ǔ)言?Go 語(yǔ)言的優(yōu)勢(shì)在哪里

1、學(xué)習(xí)曲線

它包含了類(lèi)C語(yǔ)法、GC內(nèi)置和工程工具。這一點(diǎn)非常重要,因?yàn)镚o語(yǔ)言容易學(xué)習(xí),所以一個(gè)普通的大學(xué)生花一個(gè)星期就能寫(xiě)出來(lái)可以上手的、高性能的應(yīng)用。在國(guó)內(nèi)大家都追求快,這也是為什么國(guó)內(nèi)Go流行的原因之一。

2、效率

Go擁有接近C的運(yùn)行效率和接近PHP的開(kāi)發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。

3、出身名門(mén)、血統(tǒng)純正

之所以說(shuō)Go語(yǔ)言出身名門(mén),是因?yàn)槲覀冎繥o語(yǔ)言出自Google公司,這個(gè)公司在業(yè)界的知名度和實(shí)力自然不用多說(shuō)。Google公司聚集了一批牛人,在各種編程語(yǔ)言稱(chēng)雄爭(zhēng)霸的局面下推出新的編程語(yǔ)言,自然有它的戰(zhàn)略考慮。而且從Go語(yǔ)言的發(fā)展態(tài)勢(shì)來(lái)看,Google對(duì)它這個(gè)新的寵兒還是很看重的,Go自然有一個(gè)良好的發(fā)展前途。我們看看Go語(yǔ)言的主要?jiǎng)?chuàng)造者,血統(tǒng)純正這點(diǎn)就可見(jiàn)端倪了。

4、組合的思想、無(wú)侵入式的接口

Go語(yǔ)言可以說(shuō)是開(kāi)發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語(yǔ)言支持當(dāng)前所有的編程范式,包括過(guò)程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。

5、強(qiáng)大的標(biāo)準(zhǔn)庫(kù)

這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫(kù)基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個(gè),網(wǎng)絡(luò)層、系統(tǒng)層的庫(kù)非常實(shí)用。

6、部署方便

我相信這一點(diǎn)是很多人選擇Go的最大理由,因?yàn)椴渴鹛奖?,所以現(xiàn)在也有很多人用Go開(kāi)發(fā)運(yùn)維程序。

7、簡(jiǎn)單的并發(fā)

它包含降低心智的并發(fā)和簡(jiǎn)易的數(shù)據(jù)同步,我覺(jué)得這是Go最大的特色。之所以寫(xiě)正確的并發(fā)、容錯(cuò)和可擴(kuò)展的程序如此之難,是因?yàn)槲覀冇昧隋e(cuò)誤的工具和錯(cuò)誤的抽象,Go可以說(shuō)這一塊做的相當(dāng)簡(jiǎn)單。

8、穩(wěn)定性

Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會(huì)更穩(wěn)定呢?這是因?yàn)镚o提供了軟件生命周期的各個(gè)環(huán)節(jié)的工具,如go

tool、gofmt、go test。

GO語(yǔ)言(十三):使用 Go 和 Gin 開(kāi)發(fā) RESTful API(下)

當(dāng)客戶端在 發(fā)出POST請(qǐng)求時(shí)/albums,您希望將請(qǐng)求正文中描述的專(zhuān)輯添加到現(xiàn)有專(zhuān)輯數(shù)據(jù)中。

為此,您將編寫(xiě)以下內(nèi)容:

1、編寫(xiě)代碼

a.添加代碼以將專(zhuān)輯數(shù)據(jù)添加到專(zhuān)輯列表。

在此代碼中:

1)用于Context.BindJSON 將請(qǐng)求正文綁定到newAlbum。

2) album將從 JSON 初始化的結(jié)構(gòu)附加到albums 切片。

3)向響應(yīng)添加201狀態(tài)代碼,以及表示您添加的專(zhuān)輯的 JSON。

b.更改您的main函數(shù),使其包含該router.POST函數(shù),如下所示。

在此代碼中:

1)將路徑中的POST方法與 /albumspostAlbums函數(shù)相關(guān)聯(lián)。

使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關(guān)聯(lián)。這樣,您可以根據(jù)客戶端使用的方法將發(fā)送到單個(gè)路徑的請(qǐng)求單獨(dú)路由。

a.如果服務(wù)器從上一節(jié)開(kāi)始仍在運(yùn)行,請(qǐng)停止它。

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

c.從不同的命令行窗口,用于curl向正在運(yùn)行的 Web 服務(wù)發(fā)出請(qǐng)求。

該命令應(yīng)顯示添加專(zhuān)輯的標(biāo)題和 JSON。

d.與上一節(jié)一樣,使用curl檢索完整的專(zhuān)輯列表,您可以使用它來(lái)確認(rèn)添加了新專(zhuān)輯。

該命令應(yīng)顯示專(zhuān)輯列表。

當(dāng)客戶端向 發(fā)出請(qǐng)求時(shí)GET /albums/[id],您希望返回 ID 與id路徑參數(shù)匹配的專(zhuān)輯。

為此,您將:

a.在您在上一節(jié)中添加的函數(shù)下方postAlbums,粘貼以下代碼以檢索特定專(zhuān)輯。

此getAlbumByID函數(shù)將提取請(qǐng)求路徑中的 ID,然后找到匹配的專(zhuān)輯。

在此代碼中:

(1)Context.Param用于從 URL 中檢索id路徑參數(shù)。當(dāng)您將此處理程序映射到路徑時(shí),您將在路徑中包含參數(shù)的占位符。

(2)循環(huán)album切片中的結(jié)構(gòu),尋找其ID 字段值與id參數(shù)值匹配的結(jié)構(gòu)。如果找到,則將該album結(jié)構(gòu)序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應(yīng)返回。

如上所述,實(shí)際使用中的服務(wù)可能會(huì)使用數(shù)據(jù)庫(kù)查詢來(lái)執(zhí)行此查找。

(3)如果找不到專(zhuān)輯,則返回 HTTP 404錯(cuò)誤。

b.最后,更改您的main,使其包含對(duì)router.GET的新調(diào)用,路徑現(xiàn)在為/albums/:id ,如以下示例所示。

在此代碼中:

(1)將/albums/:id路徑與getAlbumByID功能相關(guān)聯(lián)。在 Gin 中,路徑中項(xiàng)目前面的冒號(hào)表示該項(xiàng)目是路徑參數(shù)。

a.如果服務(wù)器從上一節(jié)開(kāi)始仍在運(yùn)行,請(qǐng)停止它。

b.在包含 main.go 的目錄中的命令行中,運(yùn)行代碼以啟動(dòng)服務(wù)器。

c.從不同的命令行窗口,用于curl向正在運(yùn)行的 Web 服務(wù)發(fā)出請(qǐng)求。

該命令應(yīng)顯示您使用其 ID 的專(zhuān)輯的 JSON。如果找不到專(zhuān)輯,您將收到帶有錯(cuò)誤消息的 JSON。

恭喜!您剛剛使用 Go 和 Gin 編寫(xiě)了一個(gè)簡(jiǎn)單的 RESTful Web 服務(wù)。

本節(jié)包含您使用本教程構(gòu)建的應(yīng)用程序的代碼。

當(dāng)教練吧!三套娃遭遇史無(wú)前例禁賽,特魯索娃最失意,K寶意難平

俄羅斯 體育 代表團(tuán)最近遭遇了有史以來(lái)最為嚴(yán)重的禁賽,國(guó)際滑聯(lián)在本月初直接通告俄羅斯冰上項(xiàng)目,拒絕讓其參加該月的法國(guó)蒙彼利埃世錦賽。這對(duì)于喜愛(ài)冰上項(xiàng)目的網(wǎng)民來(lái)說(shuō)無(wú)疑是一大損失,然而對(duì)于俄羅斯代表團(tuán)而言,這更是一次斷崖式的打擊,近三年冰上項(xiàng)目好不容易有了起色,現(xiàn)在又遭受重創(chuàng),如果禁賽期遙遙無(wú)期,那所帶來(lái)的損失將不可估量。

瓦利耶娃

而在這消息傳來(lái),受關(guān)注最高的無(wú)疑是在北京冬奧會(huì)上有出色發(fā)揮的三套娃組合。在北京冬奧會(huì)結(jié)束之時(shí),三套娃就早已出現(xiàn)在了俄羅斯的滑冰場(chǎng)上,她們一時(shí)也不敢耽擱,因?yàn)殡S后的蒙彼利埃世錦賽還在等著她們。在北京,三套娃姐妹不僅為大家奉獻(xiàn)了唯美絕倫的視覺(jué)盛宴,更重要的是她們代表了自由滑的最高水平,大家也把這其中的些許遺憾和美好期待推向了即將到來(lái)的蒙彼利埃世錦賽,大家希望能有更完美的表演在等著咱們,但是一切都事與愿違,或許注定這就是殘缺的美好。

特魯索娃

被禁賽,意味著套娃組合與世錦賽無(wú)緣,意味著本屆世錦賽精彩程度會(huì)大打折扣,當(dāng)然這里面無(wú)疑特魯索娃和瓦利耶娃最為失意。特魯索娃近幾年一直在為金牌做最大努力,上屆世錦賽與金牌擦肩而過(guò),本屆奧運(yùn)會(huì)她難度做到了極致卻再次與金牌失之交臂,或許世錦賽是她最后的摘金希望,坦白說(shuō)17歲的她很難出現(xiàn)在米蘭的賽場(chǎng),這一次的遺憾很可能終身難平。

同樣對(duì)于瓦利耶娃來(lái)說(shuō)也如此,雖年紀(jì)最小未來(lái)的機(jī)會(huì)很多,但是去年的藥檢陽(yáng)性一直沒(méi)有最后定案,加上這次全體禁賽,瓦利耶娃小小身軀能否堅(jiān)持下去很不好說(shuō)。據(jù)傳言她已經(jīng)有當(dāng)教練的想法,如果真的如此,我不知道該用怎樣的方式來(lái)祝福,本該奮戰(zhàn)的時(shí)節(jié)突然隱退,心中難免傷感不斷。

謝爾巴科娃

特魯索娃最失意,瓦利耶娃意難平,而作為領(lǐng)軍人物的謝爾巴科娃也陷入兩難境地,一個(gè)時(shí)代或就此謝幕,謝爾巴科娃透露出也有當(dāng)教練的想法。但是對(duì)于廣大民眾來(lái)說(shuō),如果能歸化她們或許是雙方利好,北京給她們留下了特別好的印象,咱運(yùn)動(dòng)員在花滑項(xiàng)目上成績(jī)一直處于中等,若三娃齊降,對(duì)咱們的成績(jī)提升的確有很大幫助,同時(shí)她們也圓了自由滑大滿貫的夢(mèng)想,何不快哉!

套娃組合參加了什么比賽

北京冬奧會(huì)花樣滑冰。

作為女單選手參加花樣滑冰的這三位被稱(chēng)為“套娃天團(tuán)”的運(yùn)動(dòng)員是:卡米拉·瓦利耶娃、安娜·謝爾巴科娃和亞歷山德拉·特魯索娃。她們?cè)诟鞔髧?guó)際賽事上都有精彩的表現(xiàn),不僅在動(dòng)作的完成程度上,還是在動(dòng)作的優(yōu)雅上,都得到了業(yè)內(nèi)人士的認(rèn)可和喜愛(ài),她們?nèi)粦{借著自己過(guò)硬的專(zhuān)業(yè)技術(shù),也在中國(guó)收獲了不少粉絲。 卡米拉·瓦利耶娃、安娜·謝爾巴科娃和亞歷山德拉·特魯索娃她們?nèi)灰彩俏覈?guó)花樣滑冰運(yùn)動(dòng)員朱易的強(qiáng)大對(duì)手。

卡米拉·瓦利耶娃在自己才十五歲的時(shí)候就已經(jīng)刷新了短節(jié)目、自由滑總成績(jī)的世界紀(jì)錄,她的技術(shù)和專(zhuān)業(yè)也成為本次奪冠的大熱門(mén),安娜·謝爾巴科娃曾經(jīng)獲得2021年世錦賽花滑女單冠軍,她可以擁有3-4個(gè)四周跳,還可以做出成熟的勾手,她的勾手四周跳也是她的絕技之一;亞歷山德拉·特魯索娃在她十四歲的時(shí)候就可以做出四周跳,她的技術(shù)也讓不少運(yùn)動(dòng)員羨艷。

Go語(yǔ)言的特點(diǎn)

類(lèi)型 在變量名后邊

也可不顯式聲明類(lèi)型, 類(lèi)型推斷, 但是是靜態(tài)語(yǔ)言, name一開(kāi)始放字符串就不能再賦值數(shù)字

方法,屬性 分開(kāi) 方法名首字母大寫(xiě)就是就是外部可調(diào)的

面向?qū)ο笤O(shè)計(jì)的一個(gè)重要原則:“優(yōu)先使用組合而不是繼承”

Dog 也是Animal , 要復(fù)用Animal 的屬性和方法,

只需要在結(jié)構(gòu)體 type 里面寫(xiě) Animal

入口也是main, 用用試試

多態(tài), 有這個(gè)方法就是這個(gè)接口的實(shí)現(xiàn), 具體的類(lèi) 不需要知道自己實(shí)現(xiàn)了什么接口,

使用: 在一個(gè)函數(shù)調(diào)用之前加上關(guān)鍵字go 就啟動(dòng)了一個(gè)goroutine

創(chuàng)建一個(gè)goroutine,它會(huì)被加入到一個(gè)全局的運(yùn)行隊(duì)列當(dāng)中,

調(diào)度器 會(huì)把他們分配給某個(gè) 邏輯處理器 的隊(duì)列,

一個(gè)邏輯處理器 綁定到一個(gè) 操作系統(tǒng)線程 ,在上面運(yùn)行g(shù)oroutine,

如果goroutine需要讀寫(xiě)文件, 阻塞 ,就脫離邏輯處理器 直接 goroutine - 系統(tǒng)線程 綁定

編譯成同名.exe 來(lái)執(zhí)行, 不通過(guò)虛擬機(jī), 直接是機(jī)器碼, 和C 一樣, 所以非???/p>

但是也有自動(dòng)垃圾回收,每個(gè)exe文件當(dāng)中已經(jīng)包含了一個(gè)類(lèi)似于虛擬機(jī)的runtime,進(jìn)行g(shù)oroutine的調(diào)度

默認(rèn)是靜態(tài)鏈接的,那個(gè)exe會(huì)把運(yùn)行時(shí)所需要的所有東西都加進(jìn)去,這樣就可以把exe復(fù)制到任何地方去運(yùn)行了, 因此 生成的 .exe 文件非常大

文章名稱(chēng):go語(yǔ)言全組合套娃的簡(jiǎn)單介紹
瀏覽路徑:http://m.rwnh.cn/article48/hiioep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、關(guān)鍵詞優(yōu)化、域名注冊(cè)、虛擬主機(jī)做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司

廣告

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

成都網(wǎng)站建設(shè)
惠安县| 奉新县| 普陀区| 沁阳市| 淮滨县| 西畴县| 博野县| 新野县| 石屏县| 夏邑县| 汕尾市| 颍上县| 惠安县| 安达市| 京山县| 米泉市| 安仁县| 青川县| 云阳县| 疏勒县| 饶平县| 冷水江市| 夏津县| 武夷山市| 宝丰县| 织金县| 延寿县| 青铜峡市| 淮南市| 长治市| 长阳| 仲巴县| 淅川县| 乌审旗| 顺义区| 正阳县| 洪泽县| 藁城市| 徐闻县| 上饶市| 五家渠市|