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

go語言組合思想 go語言的基本類型

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

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

創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,先為香河等服務(wù)建站,香河等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為香河企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

例子

FIFO Stack

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

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

泛型通過允許類型具有類型參數(shù)來解決此問題:

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)

}

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

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

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

為什么要使用 Go 語言?Go 語言的優(yōu)勢在哪里

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

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

2、效率

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

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

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

4、組合的思想、無侵入式的接口

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

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

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

6、部署方便

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

7、簡單的并發(fā)

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

8、穩(wěn)定性

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

tool、gofmt、go test。

go語言現(xiàn)在很重要么??

Go作為Google2009年推出的語言,其被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。

對于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對于 游戲 服務(wù)端的開發(fā)而言是再好不過了。

到現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。

=================================

哪些大公司在使用Go語言:

1、Google

這個(gè)不用多做介紹,作為開發(fā)Go語言的公司,當(dāng)仁不讓。Google基于Go有很多優(yōu)秀的項(xiàng)目,比如: ,大家也可以在Github上 查看更多Google的Go開源項(xiàng)目。

2、Facebook

Facebook也在用,為此他們還專門在Github上建立了一個(gè)開源組織facebookgo,大家可以通過 訪問查看facebook開源的項(xiàng)目,比如著名的是平滑升級的grace。

3、騰訊

騰訊作為國內(nèi)的大公司,還是敢于嘗試的,尤其是Docker容器化這一塊,他們在15年已經(jīng)做了docker萬臺規(guī)模的實(shí)踐,具體可以參考

4、百度

目前所知的百度的使用是在運(yùn)維這邊,是百度運(yùn)維的一個(gè)BFE項(xiàng)目,負(fù)責(zé)前端流量的接入。他們的負(fù)責(zé)人在2016年有分享,大家可以看下這個(gè)

5、阿里

阿里巴巴具體的項(xiàng)目不太清楚,不過聽說其系統(tǒng)部門、CDN等正在招Go方面的人。

6、京東

京東云消息推送系統(tǒng)、云存儲,以及京東商城等都有使用Go做開發(fā)。

7、小米

小米對Golang的支持,莫過于運(yùn)維監(jiān)控系統(tǒng)的開源,也就是

此外,小米互娛、小米商城、小米視頻、小米生態(tài)鏈等團(tuán)隊(duì)都在使用Golang。

8、360

360對Golang的使用也不少,一個(gè)是開源的日志搜索系統(tǒng)Poseidon,托管在Github上,

==================================

Go適合做什么?為何這么多人偏愛Go語言?

Go強(qiáng)大的開發(fā)團(tuán)隊(duì)

1、自由高效:組合的思想、無侵入式的接口

Go語言可以說是開發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語言支持當(dāng)前所有的編程范式,包括過程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。程序員們可以各取所需、自由組合、想怎么玩就怎么玩。

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

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

3、部署方便:二進(jìn)制文件、Copy部署

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

4、簡單的并發(fā)

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

5、穩(wěn)定性

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

================================

我們?yōu)槭裁催x擇GO語言

選擇GO語言,主要是基于兩方面的考慮

1. 執(zhí)行性能 縮短API的響應(yīng)時(shí)長,解決批量請求訪問超時(shí)的問題。在Uwork的業(yè)務(wù)場景下,一次API批量請求,往往會涉及對另外接口服務(wù)的多次調(diào)用,而在之前的PHP實(shí)現(xiàn)模式下,要做到并行調(diào)用是非常困難的,串行處理卻不能從根本上提高處理性能。而GO語言不一樣,通過協(xié)程可以方便的實(shí)現(xiàn)API的并行處理,達(dá)到處理效率的最大化。 依賴Golang的高性能HTTP Server,提升系統(tǒng)吞吐能力,由PHP的數(shù)百級別提升到數(shù)千里甚至過萬級別。

2. 開發(fā)效率 GO語言使用起來簡單、代碼描述效率高、編碼規(guī)范統(tǒng)一、上手快。 通過少量的代碼,即可實(shí)現(xiàn)框架的標(biāo)準(zhǔn)化,并以統(tǒng)一的規(guī)范快速構(gòu)建API業(yè)務(wù)邏輯。 能快速的構(gòu)建各種通用組件和公共類庫,進(jìn)一步提升開發(fā)效率,實(shí)現(xiàn)特定場景下的功能量產(chǎn)。

Go語言近兩年的發(fā)展速度還是非??斓?,一方面Go語言有強(qiáng)大的行業(yè)背書,另一方面Go語言在設(shè)計(jì)時(shí)充分考慮了當(dāng)前的編程環(huán)境,加強(qiáng)了大數(shù)據(jù)量、高并發(fā)等應(yīng)用場景的處理能力,強(qiáng)調(diào)編程語言自身對于處理性能的追求,相信Go語言在未來大數(shù)據(jù)和人工智能相關(guān)技術(shù)逐漸落地應(yīng)用的背景下,會有一個(gè)較為廣闊的發(fā)展空間。

當(dāng)前名稱:go語言組合思想 go語言的基本類型
地址分享:http://jinyejixie.com/article30/ddoggso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)網(wǎng)站營銷、定制開發(fā)網(wǎng)站內(nèi)鏈、網(wǎng)站制作、品牌網(wǎng)站建設(shè)

廣告

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

綿陽服務(wù)器托管
方城县| 成安县| 逊克县| 东台市| 依兰县| 重庆市| 特克斯县| 九江市| 松原市| 平阳县| 张家港市| 新蔡县| 张家港市| 辛集市| 清苑县| 兴文县| 平乡县| 临夏县| 绥阳县| 郑州市| 司法| 贵州省| 邯郸县| 来凤县| 昭通市| 曲沃县| 道孚县| 聂荣县| 神池县| 额济纳旗| 萨嘎县| 定结县| 灌阳县| 通山县| 利川市| 广汉市| 临桂县| 淮南市| 玉龙| 财经| 凤翔县|