国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

這篇具有很好參考價(jià)值的文章主要介紹了【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1. 為什么互聯(lián)網(wǎng)世界需要Go語言

1.1 硬件限制:摩爾定律已然失效?

1.2 Go語言為并發(fā)而生

1.3 Go性能強(qiáng)悍

1.4 Go語言簡單易學(xué)

1.4.1 語法簡潔

1.4.2 代碼風(fēng)格統(tǒng)一

1.4.3開發(fā)效率高?

2.Go語言的誕生與發(fā)展

2.1什么是Go語言?

?2.2 Go語言的誕生

2.3?Go Gopher——Go語言的吉祥物

3. 為什么要學(xué)習(xí)Go語言

3.1 Go語言的特性

3.1.1 語法簡單

3.1.2 并發(fā)模型

3.1.3 內(nèi)存分配

3.1.4 垃圾回收

3.1.5 靜態(tài)鏈接

3.1.6 標(biāo)準(zhǔn)庫

3.1.7 工具鏈

3.2 Go語言為并發(fā)而生?

3.3 Go語言的性能

4. 學(xué)習(xí)Go語言的前景?

4.1 一些Go語言開發(fā)下項(xiàng)目

4.1.1 Docker

4.1.2?Go語言

4.1.3?Kubernetes

4.1.4?etcd

4.1.5?beego

4.1.6?martini

4.1.7?codis

4.1.8?delve

4.2 一些使用Go語言的公司

4.2.1 Google

4.2.2 Facebook

4.2.3 騰訊

4.2.4 百度

4.2.5 七牛云

4.2.6 京東

4.2.7 小米

4.2.8 360

作者寄語:


Go 語言是一門新生語言,從其出現(xiàn)就備受大家的喜愛。但又因?yàn)槠渥鳛橐婚T新生語言,大部分的編程初學(xué)者對其并不太了解,外加上當(dāng)下網(wǎng)絡(luò)中針對于Go語言的教程以及講解的相關(guān)博客并不多,它并不像C或者Java一樣在網(wǎng)絡(luò)中可以找到大把大把的相關(guān)資料,所以科普以及講解Go語言知識的道路任重而道遠(yuǎn),于是乎本篇文章會帶領(lǐng)讀者領(lǐng)略 Go 語言的特性,介紹 Go 語言在國內(nèi)外公司及項(xiàng)目的應(yīng)用情況,同時(shí)讓讀者了解這門強(qiáng)大語言背后的三位締造者及團(tuán)隊(duì)成員,以及說是我們?yōu)槭裁匆獙W(xué)習(xí)Go語言!Go語言——讓你用寫Python代碼的開發(fā)效率編寫C語言代碼。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

1. 為什么互聯(lián)網(wǎng)世界需要Go語言

在進(jìn)行標(biāo)題的回答之前,我向大家拋出一個(gè)問題:世界上已經(jīng)有太多太多的編程語言了,為什么又出來一個(gè)Go語言?

對啊,這個(gè)世界上有太多太多的語言了,可為什么偏偏又要出來一個(gè)Go語言呢?一個(gè)語言的成立興起并非偶然,如果它一無事處的話,那么也就不會有開發(fā)者去使用了,所以呢,Go語言一定是有什么優(yōu)秀的特點(diǎn)使得這個(gè)互聯(lián)網(wǎng)世界容得下它。

1.1 硬件限制:摩爾定律已然失效?

摩爾定律:當(dāng)價(jià)格不變時(shí),集成電路上可容納的元器件的數(shù)目,約每隔18-24個(gè)月便會增加一倍,性能也將提升一倍。 換言之,每一美元所能買到的電腦性能,將每隔18-24個(gè)月翻一倍以上。?

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

從上面的圖表可以看出,近十年單線程性能和處理器頻率保持穩(wěn)定。我們不能像之前一樣把添加更多晶體管當(dāng)成是解決方案,因?yàn)樵谳^小規(guī)模上一些量子特性開始出現(xiàn)(如隧道效應(yīng)),并且因?yàn)樵谕瑯有〉目臻g里放置更多晶體管的代價(jià)非常昂貴,每1美元可以添加的晶體管數(shù)量開始下降。

制造商開始從其他方面提高處理器的性能:

  1. 向處理器添加越來越多的內(nèi)核,如四核和八核CPU。
  2. 發(fā)明了超線程技術(shù)。
  3. 為處理器添加了更多緩存以提高性能。

但上述解決方案也有其自身的局限性。因?yàn)槌杀驹蛭覀儾荒軣o限制的為計(jì)算機(jī)添加內(nèi)核,也無法無限制的添加緩存來提高性能,因?yàn)榫彺嬖酱?,取值的性能越低?/p>

我們沒有辦法在硬件上一直取得突破,我們需要提高軟件的性能或者說我們需要高性能的軟件。

1.2 Go語言為并發(fā)而生

如上所述,硬件制造商正在為處理器添加越來越多的內(nèi)核以提高性能。所有數(shù)據(jù)中心都在這些處理器上運(yùn)行,更重要的是,今天的應(yīng)用程序使用多個(gè)微服務(wù)來維護(hù)數(shù)據(jù)庫連接,消息隊(duì)列和維護(hù)緩存。因此,開發(fā)的軟件和編程語言應(yīng)該可以輕松地支持并發(fā)性,并且應(yīng)該能夠隨著CPU核心數(shù)量的增加而可擴(kuò)展。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

但是,大多數(shù)現(xiàn)代編程語言(如Java,Python等)都來自90年代的單線程環(huán)境。雖然一些編程語言的框架在不斷地提高多核資源使用效率,例如 Java 的 Netty 等,但仍然需要開發(fā)人員花費(fèi)大量的時(shí)間和精力搞懂這些框架的運(yùn)行原理后才能熟練掌握。

Go于2009年發(fā)布,當(dāng)時(shí)多核處理器已經(jīng)上市。Go語言在多核并發(fā)上擁有原生的設(shè)計(jì)優(yōu)勢,Go語言從底層原生支持并發(fā),無須第三方庫、開發(fā)者的編程技巧和開發(fā)經(jīng)驗(yàn)。

很多公司,特別是中國的互聯(lián)網(wǎng)公司,即將或者已經(jīng)完成了使用 Go 語言改造舊系統(tǒng)的過程。經(jīng)過 Go 語言重構(gòu)的系統(tǒng)能使用更少的硬件資源獲得更高的并發(fā)和I/O吞吐表現(xiàn)。充分挖掘硬件設(shè)備的潛力也滿足當(dāng)前精細(xì)化運(yùn)營的市場大環(huán)境。

Go語言的并發(fā)是基于?goroutine?的,goroutine?類似于線程,但并非線程??梢詫?goroutine?理解為一種虛擬線程。Go 語言運(yùn)行時(shí)會參與調(diào)度?goroutine,并將?goroutine?合理地分配到每個(gè) CPU 中,最大限度地使用CPU性能。開啟一個(gè)goroutine的消耗非常小(大約2KB的內(nèi)存),你可以輕松創(chuàng)建數(shù)百萬個(gè)goroutine。

goroutine的特點(diǎn):

  1. goroutine具有可增長的分段堆棧。這意味著它們只在需要時(shí)才會使用更多內(nèi)存。
  2. goroutine的啟動時(shí)間比線程快。
  3. goroutine原生支持利用channel安全地進(jìn)行通信。
  4. goroutine共享數(shù)據(jù)結(jié)構(gòu)時(shí)無需使用互斥鎖。

1.3 Go性能強(qiáng)悍

與其他現(xiàn)代高級語言(如Java/Python)相比,使用C,C++的最大好處是它們的性能。因?yàn)镃/ C++是編譯型語言而不是解釋的語言。 處理器只能理解二進(jìn)制文件,Java和Python這種高級語言在運(yùn)行的時(shí)候需要先將人類可讀的代碼翻譯成字節(jié)碼,然后由專門的解釋器再轉(zhuǎn)變成處理器可以理解的二進(jìn)制文件。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

同C,C++一樣,Go語言也是編譯型的語言,它直接將人類可讀的代碼編譯成了處理器可以直接運(yùn)行的二進(jìn)制文件,執(zhí)行效率更高,性能更好。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

可以看出,Go 語言在性能上更接近于 Java 語言,雖然在某些測試用例上不如經(jīng)過多年優(yōu)化的 Java 語言,但畢竟 Java 語言已經(jīng)經(jīng)歷了多年的積累和優(yōu)化。Go 語言在未來的版本中會通過不斷的版本優(yōu)化提高單核運(yùn)行性能。

1.4 Go語言簡單易學(xué)

1.4.1 語法簡潔

Go 語言簡單易學(xué),學(xué)習(xí)曲線平緩,不需要像 C/C++ 語言動輒需要兩到三年的學(xué)習(xí)期。Go 語言被稱為“互聯(lián)網(wǎng)時(shí)代的C語言”。Go 語言的風(fēng)格類似于C語言。其語法在C語言的基礎(chǔ)上進(jìn)行了大幅的簡化,去掉了不需要的表達(dá)式括號,循環(huán)也只有 for 一種表示方法,就可以實(shí)現(xiàn)數(shù)值、鍵值等各種遍歷。

1.4.2 代碼風(fēng)格統(tǒng)一

Go 語言提供了一套格式化工具——go fmt。一些 Go 語言的開發(fā)環(huán)境或者編輯器在保存時(shí),都會使用格式化工具進(jìn)行修改代碼的格式化,這樣就保證了不同開發(fā)者提交的代碼都是統(tǒng)一的格式。(吐槽下:再也不用擔(dān)心那些看不懂的黑魔法了…)

1.4.3開發(fā)效率高?

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

?Go語言實(shí)現(xiàn)了開發(fā)效率與執(zhí)行效率的完美結(jié)合,讓你像寫Python代碼(效率)一樣編寫C代碼(性能)。

2.Go語言的誕生與發(fā)展

我們剛才說了那么多,無非是想要去告訴大家Go語言的優(yōu)勢以及其發(fā)展的前景,那么現(xiàn)在就帶大家了解一下Go語言吧!

2.1什么是Go語言?

Go語言(或 Golang)起源于 2007 年,并在 2009 年正式對外發(fā)布。Go 是非常年輕的一門語言,它的主要目標(biāo)是“兼具?Python?等動態(tài)語言的開發(fā)速度和 C/C++?等編譯型語言的性能與安全性”。

Go語言是編程語言設(shè)計(jì)的又一次嘗試,是對類C語言的重大改進(jìn),它不但能讓你訪問底層操作系統(tǒng),還提供了強(qiáng)大的網(wǎng)絡(luò)編程和并發(fā)編程支持。Go語言的用途眾多,可以進(jìn)行網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言



Go語言的推出,旨在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,具有“部署簡單、并發(fā)性好、語言設(shè)計(jì)良好、執(zhí)行性能好”等優(yōu)勢,目前國內(nèi)諸多 IT 公司均已采用Go語言開發(fā)項(xiàng)目。

Go語言有時(shí)候被描述為“C 類似語言”,或者是“21 世紀(jì)的C語言”。Go 從C語言繼承了相似的表達(dá)式語法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類型、調(diào)用參數(shù)傳值、指針等很多思想,還有C語言一直所看中的編譯后機(jī)器碼的運(yùn)行效率以及和現(xiàn)有操作系統(tǒng)的無縫適配。

因?yàn)镚o語言沒有類和繼承的概念,所以它和?Java?或 C++ 看起來并不相同。但是它通過接口(interface)的概念來實(shí)現(xiàn)多態(tài)性。Go語言有一個(gè)清晰易懂的輕量級類型系統(tǒng),在類型之間也沒有層級之說。因此可以說Go語言是一門混合型的語言。

此外,很多重要的開源項(xiàng)目都是使用Go語言開發(fā)的,其中包括?Docker、Go-Ethereum、Thrraform 和 Kubernetes。?

?2.2 Go語言的誕生

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

Go 語言從 2009 年 9 月 21 日開始作為谷歌公司 20% 兼職項(xiàng)目,即相關(guān)員工利用 20% 的空余時(shí)間來參與 Go 語言的研發(fā)工作。

谷歌的“20%時(shí)間”工作方式,允許工程師拿出20%的時(shí)間來研究自己喜歡的項(xiàng)目。語音服務(wù)Google Now、谷歌新聞Google News、谷歌地圖Google Map上的交通信息等,全都是20%時(shí)間的產(chǎn)物。

該項(xiàng)目的三位領(lǐng)導(dǎo)者均是著名的 IT 工程師:

1) Ken Thompson

貝爾實(shí)驗(yàn)室 Unix 團(tuán)隊(duì)成員,C語言、Unix 和 Plan 9 的創(chuàng)始人之一,在 20 世紀(jì) 70 年代,設(shè)計(jì)并實(shí)現(xiàn)了最初的 UNIX 操作系統(tǒng),僅從這一點(diǎn)說,他對計(jì)算機(jī)科學(xué)的貢獻(xiàn)怎么強(qiáng)調(diào)都不過分。他還與 Rob Pike 合作設(shè)計(jì)了 UTF-8 編碼方案。

2) Rob Pike

Go語言項(xiàng)目總負(fù)責(zé)人,貝爾實(shí)驗(yàn)室 Unix 團(tuán)隊(duì)成員,除幫助設(shè)計(jì) UTF-8 外,還幫助開發(fā)了分布式多用戶操作系統(tǒng) Plan 9、Inferno 操作系統(tǒng)和 Limbo 編程語言,并與人合著了《The Unix Programming Environment》,對 UNIX 的設(shè)計(jì)理念做了正統(tǒng)的闡述。

3) Robert Griesemer

就職于 Google,參與開發(fā) Java HotSpot 虛擬機(jī),對語言設(shè)計(jì)有深入的認(rèn)識,并負(fù)責(zé) Chrome 瀏覽器和 Node.js 使用的 Google V8?JavaScript 引擎的代碼生成部分。

這些計(jì)算機(jī)科學(xué)領(lǐng)城的重量級人物設(shè)計(jì)Go語言的初衷是滿足 Google 的需求。設(shè)計(jì)此語言花費(fèi)了兩年的時(shí)間,融入了整個(gè)團(tuán)隊(duì)多年的經(jīng)驗(yàn)及對編程語言設(shè)計(jì)的深入認(rèn)識。設(shè)計(jì)團(tuán)隊(duì)借鑒了 Pascal、Oberon 和C語言的設(shè)計(jì)智慧,同時(shí)讓Go語言具備動態(tài)語言的便利性。因此,Go語言體現(xiàn)了經(jīng)驗(yàn)豐富的計(jì)算機(jī)科學(xué)家的語言設(shè)計(jì)理念,是為全球最大的互聯(lián)網(wǎng)公司之一設(shè)計(jì)的。

Go語言的所有設(shè)計(jì)者都說,設(shè)計(jì)Go語言是因?yàn)?C++ 給他們帶來了挫敗感。在 Google I/O 2012 的 Go 設(shè)計(jì)小組見面會上,Rob Pike 是這樣說的:

我們做了大量的 C++ 開發(fā),厭煩了等待編譯完成,盡管這是玩笑,但在很大程度上來說也是事實(shí)。

2.3?Go Gopher——Go語言的吉祥物

Go語言有一個(gè)吉祥物,在會議、文檔頁面和博文中,大多會包含下圖所示的 Go Gopher,這是才華橫溢的插畫家 Renee French 設(shè)計(jì)的,她也是 Go 設(shè)計(jì)者之一 Rob Pike 的妻子。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

3. 為什么要學(xué)習(xí)Go語言

3.1 Go語言的特性

Go語言也稱為 Golang,是由 Google 公司開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型、并具有垃圾回收功能的編程語言。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言



接下來從幾個(gè)方面來具體介紹一下Go語言的特性。

3.1.1 語法簡單

拋開語法樣式不談,單就類型和規(guī)則而言,Go 與 C99、C11 相似之處頗多,這也是Go語言被冠以“NextC”名號的重要原因。

Go語言的語法處于簡單和復(fù)雜的兩極。C語言簡單到你每寫下一行代碼,都能在腦中想象出編譯后的模樣,指令如何執(zhí)行,內(nèi)存如何分配,等等。而 C 的復(fù)雜在于,它有太多隱晦而不著邊際的規(guī)則,著實(shí)讓人頭疼。相比較而言,Go 從零開始,沒有歷史包袱,在汲取眾多經(jīng)驗(yàn)教訓(xùn)后,可從頭規(guī)劃一個(gè)規(guī)則嚴(yán)謹(jǐn)、條理簡單的世界。

Go語言的語法規(guī)則嚴(yán)謹(jǐn),沒有歧義,更沒什么黑魔法變異用法。任何人寫出的代碼都基本一致,這使得Go語言簡單易學(xué)。放棄部分“靈活”和“自由”,換來更好的維護(hù)性,我覺得是值得的。

將“++”、“--”從運(yùn)算符降級為語句,保留指針,但默認(rèn)阻止指針運(yùn)算,帶來的好處是顯而易見的。還有,將切片和字典作為內(nèi)置類型,從運(yùn)行時(shí)的層面進(jìn)行優(yōu)化,這也算是一種“簡單”。

3.1.2 并發(fā)模型

時(shí)至今日,并發(fā)編程已成為程序員的基本技能,在各個(gè)技術(shù)社區(qū)都能看到諸多與之相關(guān)的討論主題。在這種情況下Go語言卻一反常態(tài)做了件極大膽的事,從根本上將一切都并發(fā)化,運(yùn)行時(shí)用 Goroutine 運(yùn)行所有的一切,包括 main.main 入口函數(shù)。

可以說,Goroutine 是 Go 最顯著的特征。它用類協(xié)程的方式來處理并發(fā)單元,卻又在運(yùn)行時(shí)層面做了更深度的優(yōu)化處理。這使得語法上的并發(fā)編程變得極為容易,無須處理回調(diào),無須關(guān)注線程切換,僅一個(gè)關(guān)鍵字,簡單而自然。

搭配 channel,實(shí)現(xiàn) CSP 模型。將并發(fā)單元間的數(shù)據(jù)耦合拆解開來,各司其職,這對所有糾結(jié)于內(nèi)存共享、鎖粒度的開發(fā)人員都是一個(gè)可期盼的解脫。若說有所不足,那就是應(yīng)該有個(gè)更大的計(jì)劃,將通信從進(jìn)程內(nèi)拓展到進(jìn)程外,實(shí)現(xiàn)真正意義上的分布式。

3.1.3 內(nèi)存分配

將一切并發(fā)化固然是好,但帶來的問題同樣很多。如何實(shí)現(xiàn)高并發(fā)下的內(nèi)存分配和管理就是個(gè)難題。好在 Go 選擇了 tcmalloc,它本就是為并發(fā)而設(shè)計(jì)的高性能內(nèi)存分配組件。

可以說,內(nèi)存分配器是運(yùn)行時(shí)三大組件里變化最少的部分。刨去因配合垃圾回收器而修改的內(nèi)容,內(nèi)存分配器完整保留了 tcmalloc 的原始架構(gòu)。使用 cache 為當(dāng)前執(zhí)行線程提供無鎖分配,多個(gè) central 在不同線程間平衡內(nèi)存單元復(fù)用。在更高層次里,heap 則管理著大塊內(nèi)存,用以切分成不同等級的復(fù)用內(nèi)存塊??焖俜峙浜投墐?nèi)存平衡機(jī)制,讓內(nèi)存分配器能優(yōu)秀地完成高壓力下的內(nèi)存管理任務(wù)。

在最近幾個(gè)版本中,編譯器優(yōu)化卓有成效。它會竭力將對象分配在棧上,以降低垃圾回收壓力,減少管理消耗,提升執(zhí)行性能??梢哉f,除偶爾因性能問題而被迫采用對象池和自主內(nèi)存管理外,我們基本無須參與內(nèi)存管理操作。

3.1.4 垃圾回收

垃圾回收一直是個(gè)難題。早年間,Java?就因垃圾回收低效被嘲笑了許久,后來 Sun 連續(xù)收納了好多人和技術(shù)才發(fā)展到今天??杉幢闳绱?,在 Hadoop 等大內(nèi)存應(yīng)用場景下,垃圾回收依舊捉襟見肘、步履維艱。

相比 Java,Go 面臨的困難要更多。因指針的存在,所以回收內(nèi)存不能做收縮處理。幸好,指針運(yùn)算被阻止,否則要做到精確回收都難。

每次升級,垃圾回收器必然是核心組件里修改最多的部分。從并發(fā)清理,到降低 STW 時(shí)間,直到 Go 的 1.5 版本實(shí)現(xiàn)并發(fā)標(biāo)記,逐步引入三色標(biāo)記和寫屏障等等,都是為了能讓垃圾回收在不影響用戶邏輯的情況下更好地工作。盡管有了努力,當(dāng)前版本的垃圾回收算法也只能說堪用,離好用尚有不少距離。

3.1.5 靜態(tài)鏈接

Go 剛發(fā)布時(shí),靜態(tài)鏈接被當(dāng)作優(yōu)點(diǎn)宣傳。只須編譯后的一個(gè)可執(zhí)行文件,無須附加任何東西就能部署。這似乎很不錯,只是后來風(fēng)氣變了。連著幾個(gè)版本,編譯器都在完善動態(tài)庫 buildmode 功能,場面一時(shí)變得有些尷尬。

暫不說未完工的 buildmode 模式,靜態(tài)編譯的好處顯而易見。將運(yùn)行時(shí)、依賴庫直接打包到可執(zhí)行文件內(nèi)部,簡化了部署和發(fā)布操作,無須事先安裝運(yùn)行環(huán)境和下載諸多第三方庫。這種簡單方式對于編寫系統(tǒng)軟件有著極大好處,因?yàn)閹煲蕾囈恢倍际莻€(gè)麻煩。

3.1.6 標(biāo)準(zhǔn)庫

功能完善、質(zhì)量可靠的標(biāo)準(zhǔn)庫為編程語言提供了充足動力。在不借助第三方擴(kuò)展的情況下,就可完成大部分基礎(chǔ)功能開發(fā),這大大降低了學(xué)習(xí)和使用成本。最關(guān)鍵的是,標(biāo)準(zhǔn)庫有升級和修復(fù)保障,還能從運(yùn)行時(shí)獲得深層次優(yōu)化的便利,這是第三方庫所不具備的。

Go 標(biāo)準(zhǔn)庫雖稱不得完全覆蓋,但也算極為豐富。其中值得稱道的是 net/http,僅須簡單幾條語句就能實(shí)現(xiàn)一個(gè)高性能 Web Server,這從來都是宣傳的亮點(diǎn)。更何況大批基于此的優(yōu)秀第三方 Framework 更是將 Go 推到 Web/Microservice 開發(fā)標(biāo)準(zhǔn)之一的位置。

當(dāng)然,優(yōu)秀第三方資源也是語言生態(tài)圈的重要組成部分。近年來崛起的幾門語言中,Go 算是獨(dú)樹一幟,大批優(yōu)秀作品頻繁涌現(xiàn),這也給我們學(xué)習(xí) Go 提供了很好的參照。

3.1.7 工具鏈

完整的工具鏈對于日常開發(fā)極為重要。Go 在此做得相當(dāng)不錯,無論是編譯、格式化、錯誤檢查、幫助文檔,還是第三方包下載、更新都有對應(yīng)的工具。其功能未必完善,但起碼算得上簡單易用。

內(nèi)置完整測試框架,其中包括單元測試、性能測試、代碼覆蓋率、數(shù)據(jù)競爭,以及用來調(diào)優(yōu)的 pprof,這些都是保障代碼能正確而穩(wěn)定運(yùn)行的必備利器。

除此之外,還可通過環(huán)境變量輸出運(yùn)行時(shí)監(jiān)控信息,尤其是垃圾回收和并發(fā)調(diào)度跟蹤,可進(jìn)一步幫助我們改進(jìn)算法,獲得更佳的運(yùn)行期表現(xiàn)。

3.2 Go語言為并發(fā)而生?

在早期 CPU 都是以單核的形式順序執(zhí)行機(jī)器指令。Go語言的祖先C語言正是這種順序編程語言的代表。順序編程語言中的順序是指:所有的指令都是以串行的方式執(zhí)行,在相同的時(shí)刻有且僅有一個(gè) CPU 在順序執(zhí)行程序的指令。

隨著處理器技術(shù)的發(fā)展,單核時(shí)代以提升處理器頻率來提高運(yùn)行效率的方式遇到了瓶頸,單核 CPU 發(fā)展的停滯,給多核 CPU 的發(fā)展帶來了機(jī)遇。相應(yīng)地,編程語言也開始逐步向并行化的方向發(fā)展。

雖然一些編程語言的框架在不斷地提高多核資源使用效率,例如?Java?的 Netty 等,但仍然需要開發(fā)人員花費(fèi)大量的時(shí)間和精力搞懂這些框架的運(yùn)行原理后才能熟練掌握。

作為程序員,要開發(fā)出能充分利用硬件資源的應(yīng)用程序是一件很難的事情。現(xiàn)代計(jì)算機(jī)都擁有多個(gè)核,但是大部分編程語言都沒有有效的工具讓程序可以輕易利用這些資源。編程時(shí)需要寫大量的線程同步代碼來利用多個(gè)核,很容易導(dǎo)致錯誤。

Go語言正是在多核和網(wǎng)絡(luò)化的時(shí)代背景下誕生的原生支持并發(fā)的編程語言。Go語言從底層原生支持并發(fā),無須第三方庫,開發(fā)人員可以很輕松地在編寫程序時(shí)決定怎么使用 CPU 資源。

Go語言的并發(fā)是基于 goroutine 的,goroutine 類似于線程,但并非線程??梢詫?goroutine 理解為一種虛擬線程。Go語言運(yùn)行時(shí)會參與調(diào)度 goroutine,并將 goroutine 合理地分配到每個(gè) CPU 中,最大限度地使用 CPU 性能。

多個(gè) goroutine 中,Go語言使用通道(channel)進(jìn)行通信,通道是一種內(nèi)置的數(shù)據(jù)結(jié)構(gòu),可以讓用戶在不同的 goroutine 之間同步發(fā)送具有類型的消息。這讓編程模型更傾向于在 goroutine 之間發(fā)送消息,而不是讓多個(gè) goroutine 爭奪同一個(gè)數(shù)據(jù)的使用權(quán)。

程序可以將需要并發(fā)的環(huán)節(jié)設(shè)計(jì)為生產(chǎn)者模式和消費(fèi)者的模式,將數(shù)據(jù)放入通道。通道另外一端的代碼將這些數(shù)據(jù)進(jìn)行并發(fā)計(jì)算并返回結(jié)果,如下圖所示。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

3.3 Go語言的性能

Go的執(zhí)行速度,可以參考一個(gè)語言性能測試數(shù)據(jù)網(wǎng)站:Which programming language is fastest? (Benchmarks Game) (pages.debian.net)

  • Go的性能接近C++
  • 算法時(shí)間花銷和Java接近,但內(nèi)存花銷遠(yuǎn)低于Java
  • 和python 對比,時(shí)間和內(nèi)存開銷都優(yōu)秀

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

原因:

  • 使用import引用管理方式
  • 沒有模板編譯負(fù)擔(dān)
  • 1.5版本后編譯器的優(yōu)化
  • 語言本身關(guān)鍵字很少

4. 學(xué)習(xí)Go語言的前景?

目前Go語言已經(jīng)?泛應(yīng)用于人工智能、云計(jì)算開發(fā)、容器虛擬化、?數(shù)據(jù)開發(fā)、數(shù)據(jù)分析及科學(xué)計(jì)算、運(yùn)維開發(fā)、爬蟲開發(fā)、游戲開發(fā)等領(lǐng)域。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

Go語言簡單易學(xué),天生支持并發(fā),完美契合當(dāng)下高并發(fā)的互聯(lián)網(wǎng)生態(tài)。Go語言的崗位需求持續(xù)高漲,目前的Go程序員數(shù)量少,待遇好。

抓住趨勢,要學(xué)會做一個(gè)領(lǐng)跑者而不是跟隨者。

國內(nèi)Go語言的需求潛力巨大,目前無論是國內(nèi)大廠還是新興互聯(lián)網(wǎng)公司基本上都會有Go語言的崗位需求。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.1 一些Go語言開發(fā)下項(xiàng)目

所有的編程語言都反映了語言設(shè)計(jì)者對編程哲學(xué)的反思,通常包括之前的語言所暴露的一些不足地方的改進(jìn)。Go語言從發(fā)布 1.0 版本以來備受眾多開發(fā)者關(guān)注并得到廣泛使用,Go語言的簡單、高效、并發(fā)特性吸引了眾多傳統(tǒng)語言開發(fā)者的加入,而且人數(shù)越來越多。

使用Go語言開發(fā)的開源項(xiàng)目非常多。早期的Go語言開源項(xiàng)目只是通過Go語言與傳統(tǒng)項(xiàng)目進(jìn)行C語言庫綁定實(shí)現(xiàn),例如?Qt、Sqlite 等;后期的很多項(xiàng)目都使用Go語言進(jìn)行重新原生實(shí)現(xiàn),這個(gè)過程相對于其他語言要簡單一些,這也促成了大量使用Go語言原生開發(fā)項(xiàng)目的出現(xiàn)。

下面列舉的是原生使用Go語言進(jìn)行開發(fā)的部分項(xiàng)目。

4.1.1 Docker

Docker 是一種操作系統(tǒng)層面的虛擬化技術(shù),可以在操作系統(tǒng)和應(yīng)用程序之間進(jìn)行隔離,也可以稱之為容器。Docker 可以在一臺物理服務(wù)器上快速運(yùn)行一個(gè)或多個(gè)實(shí)例。例如,啟動一個(gè) CentOS 操作系統(tǒng),并在其內(nèi)部命令行執(zhí)行指令后結(jié)束,整個(gè)過程就像自己在操作系統(tǒng)一樣高效。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言


項(xiàng)目鏈接:GitHub - moby/moby: Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

4.1.2?Go語言

Go語言自己的早期源碼使用C語言和匯編語言寫成。從 Go 1.5 版本后,完全使用Go語言自身進(jìn)行編寫。Go語言的源碼對了解Go語言的底層調(diào)度有極大的參考意義,建議希望對Go語言有深入了解的讀者讀一讀。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

項(xiàng)目鏈接:GitHub - golang/go: The Go programming language

4.1.3?Kubernetes

Google 公司開發(fā)的構(gòu)建于 Docker 之上的容器調(diào)度服務(wù),用戶可以通過 Kubernetes 集群進(jìn)行云端容器集群管理。系統(tǒng)會自動選取合適的工作節(jié)點(diǎn)來執(zhí)行具體的容器集群調(diào)度處理工作。其核心概念是 Container Pod(容器倉)。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

項(xiàng)目鏈接:GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management

4.1.4?etcd

一款分布式、可靠的 KV 存儲系統(tǒng),可以快速進(jìn)行云配置。由 CoreOS 開發(fā)并維護(hù)鍵值存儲系統(tǒng),它使用Go語言編寫,并通過 Raft 一致性算法處理日志復(fù)制以保證強(qiáng)一致性。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

項(xiàng)目鏈接:GitHub - etcd-io/etcd: Distributed reliable key-value store for the most critical data of a distributed system

4.1.5?beego

beego 是一個(gè)類似?Python?的 Tornado 框架,采用了 RESTFul 的設(shè)計(jì)思路,使用Go語言編寫的一個(gè)極輕量級、高可伸縮性和高性能的 Web 應(yīng)用框架。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

項(xiàng)目鏈接:GitHub - astaxie/beego: beego is an open-source, high-performance web framework for the Go programming language.

4.1.6?martini

一款快速構(gòu)建模塊化的 Web 應(yīng)用的Go語言框架。

項(xiàng)目鏈接:GitHub - go-martini/martini: Classy web framework for Go

4.1.7?codis

國產(chǎn)的優(yōu)秀分布式?Redis?解決方案??梢詫?codis 理解成為 Web 服務(wù)領(lǐng)域的 Nginx,它實(shí)現(xiàn)了對 Redis 的反向代理和負(fù)載均衡。

項(xiàng)目鏈接:GitHub - CodisLabs/codis: Proxy based Redis cluster solution supporting pipeline and scaling dynamically

4.1.8?delve

Go語言強(qiáng)大的調(diào)試器,被很多集成環(huán)境和編輯器整合。

項(xiàng)目鏈接:GitHub - derekparker/delve: Delve is a debugger for the Go programming language.

4.2 一些使用Go語言的公司

Go語言是谷歌在 2009 年發(fā)布的一款編程語言,自面世以來它以高效的開發(fā)效率和完美的運(yùn)行速度迅速風(fēng)靡全球,被譽(yù)為“21 世紀(jì)的C語言”。

現(xiàn)在越來越多的公司開始使用Go語言開發(fā)自己的服務(wù),同時(shí)也誕生了很多使用Go語言開發(fā)的服務(wù)和應(yīng)用,下面我們來看一下,有哪些大公司在使用Go語言。

4.2.1 Google

作為創(chuàng)造了Go語言的 google 公司,當(dāng)然會力挺Go語言了。Google 有很多基于 Go 開發(fā)的開源項(xiàng)目,比如 kubernets,docker。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.2 Facebook

Facebook 也在使用Go語言,為此他們還專門在 Github 上建立了一個(gè)開源組織 facebookgo。大家可以通過?Meta Go · GitHub?訪問查看 facebook 開源的項(xiàng)目,其中最具代表性的就是著名平滑重啟工具 grace。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.3 騰訊

騰訊在 15 年就已經(jīng)做了 Docker 萬臺規(guī)模的實(shí)踐。因?yàn)轵v訊主要的開發(fā)語言是 C/C++?,所以在使用Go語言方面會方便很多,也有很多優(yōu)勢,不過日積月累的 C/C++ 代碼很難改造,也不敢動,所以主要在新業(yè)務(wù)上嘗試使用 Go。【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.4 百度

百度主要在運(yùn)維方面使用到了Go語言,比如百度運(yùn)維的一個(gè) BFE 項(xiàng)目,主要負(fù)責(zé)前端流量的接入,其次就是百度消息通訊系統(tǒng)的服務(wù)器端也使用到了Go語言。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.5 七牛云

七牛云算是國內(nèi)第一家選Go語言做服務(wù)端的公司。早在 2011 年,當(dāng)Go語言的語法還沒完全穩(wěn)定下來的情況下,七牛云就已經(jīng)選擇將 Go 作為存儲服務(wù)端的主體語言。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.6 京東

京東云消息推送系統(tǒng)、云存儲,以及京東商城的列表頁等都是使用Go語言開發(fā)的。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.7 小米

小米對Go語言的支持,在于運(yùn)維監(jiān)控系統(tǒng)的開源,它的官方網(wǎng)址是?Open-Falcon - Monitoring system & time series database。此外,小米互娛、小米商城、小米視頻、小米生態(tài)鏈等團(tuán)隊(duì)都在使用Go語言。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

4.2.8 360

360 對Go語言的使用也不少,比如開源的日志搜索系統(tǒng) Poseidon,大家可以通過?GitHub - Qihoo360/poseidon: A search engine which can hold 100 trillion lines of log data.?查看,還有 360 的推送團(tuán)隊(duì)也在使用Go語言。

【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言



除了上面提到的,還有很多公司開始嘗試使用Go語言,比如美團(tuán)、滴滴、新浪等。

Go語言的強(qiáng)項(xiàng)在于它適合用來開發(fā)網(wǎng)絡(luò)并發(fā)方面的服務(wù),比如消息推送、監(jiān)控、容器等,所以在高并發(fā)的項(xiàng)目上大多數(shù)公司會優(yōu)先選擇 Golang 作為開發(fā)語言。

作者寄語:

回頭看 輕舟已過萬重山 向前看 長路漫漫亦燦燦?機(jī)會總是留給有準(zhǔn)備的人的,我們不要盲目跟風(fēng),要去做一只領(lǐng)頭羊,加油吧,從現(xiàn)在開始學(xué)習(xí)Golang ,相信未來的自己一定會感謝當(dāng)年自己的付出的!

我永遠(yuǎn)愛那些喜歡我支持我以及跟我一起在這方面這個(gè)行業(yè)奮斗的? 努力的朋友們。希望你們永遠(yuǎn)前程似錦!文章來源地址http://www.zghlxwxcb.cn/news/detail-439432.html

到了這里,關(guān)于【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一篇文章帶你了解-selenium工作原理詳解

    一篇文章帶你了解-selenium工作原理詳解

    前言 Selenium是一個(gè)用于Web應(yīng)用程序自動化測試工具。Selenium測試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 主要功能包括:測試與瀏覽器的兼容性——測試你的應(yīng)用程序看是否能夠很好得

    2024年02月10日
    瀏覽(26)
  • 【C++】一篇文章帶你深入了解list

    【C++】一篇文章帶你深入了解list

    list是可以在常數(shù)范圍內(nèi)在任意位置進(jìn)行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 list的底層是雙向鏈表結(jié)構(gòu),雙向鏈表中每個(gè)元素存儲在互不相關(guān)的獨(dú)立節(jié)點(diǎn)中,在節(jié)點(diǎn)中通過指針指向其前一個(gè)元素和后一個(gè)元素。 list與forward_list非常相似:最主要的不同在

    2024年04月23日
    瀏覽(30)
  • 一篇文章帶你詳細(xì)了解axios的封裝

    一篇文章帶你詳細(xì)了解axios的封裝

    對請求的封裝在實(shí)際項(xiàng)目中是十分必要的,它可以讓我們統(tǒng)一處理 http 請求。比如做一些攔截,處理一些錯誤等。本篇文章將詳細(xì)介紹如何封裝 axios 請求,具體實(shí)現(xiàn)的功能如下 基本配置 配置默認(rèn)請求地址,超時(shí)等 請求攔截 攔截 request 請求,處理一些發(fā)送請求之前做的處理,譬如給

    2024年02月07日
    瀏覽(30)
  • 【C++】一篇文章帶你深入了解string

    【C++】一篇文章帶你深入了解string

    C語言中,字符串是以’\\0’結(jié)尾的一些字符的集合,為了操作方便,C標(biāo)準(zhǔn)庫中提供了一些str系列的庫函數(shù),但是這些庫函數(shù)與字符串是分離開的,不太符合OOP的思想,而且底層空間需要用戶自己管理,稍不留神可能還會越界訪問。 string的文檔介紹 字符串是表示字符序列的類

    2024年04月08日
    瀏覽(27)
  • 【C++】一篇文章帶你深入了解vector

    【C++】一篇文章帶你深入了解vector

    vector的文檔介紹 vector是表示可變大小數(shù)組的序列容器。 就像數(shù)組一樣,vector也采用的連續(xù)存儲空間來存儲元素。也就是意味著可以采用下標(biāo)對vector的元素進(jìn)行訪問,和數(shù)組一樣高效。但是又不像數(shù)組,它的大小是可以動態(tài)改變的,而且它的大小會被容器自動處理。 本質(zhì)講,

    2024年04月22日
    瀏覽(36)
  • 一篇文章帶你了解 什么是u(ustd)帶你了解他的前世今生

    一篇文章帶你了解 什么是u(ustd)帶你了解他的前世今生

    在數(shù)字貨幣的繁榮世界中,USDT無疑是其中一位重要的角色。它的前世今生,是一個(gè)從無到有,從小到大,經(jīng)歷了種種波折和爭議的故事。 2014年11月下旬,一個(gè)名為Realcoin的注冊地為馬恩島和香港的公司決定改變自己的名字,取名為Tether。這個(gè)決定預(yù)示著一種新的數(shù)字貨幣即將

    2024年01月23日
    瀏覽(23)
  • WAF是什么?一篇文章帶你全面了解WAF

    Web應(yīng)用程序防火墻(Web Application Firewall,WAF)是一種用于保護(hù)Web應(yīng)用程序的安全設(shè)備。Web應(yīng)用程序是指通過Web瀏覽器或其他Web客戶端訪問的應(yīng)用程序。WAF的目的是保護(hù)Web應(yīng)用程序免受黑客、網(wǎng)絡(luò)攻擊和數(shù)據(jù)泄漏等安全威脅的攻擊。 在這篇文章中,我們將深入探討WAF的工作原理

    2024年02月10日
    瀏覽(23)
  • 【網(wǎng)絡(luò)安全】一篇文章帶你了解CTF那些事兒

    【網(wǎng)絡(luò)安全】一篇文章帶你了解CTF那些事兒

    CTF(Capture The Flag)中文一般譯作奪旗賽,在網(wǎng)絡(luò)安全領(lǐng)域中指的是網(wǎng)絡(luò)安全技術(shù)人員之間進(jìn)行技術(shù)競技的一種比賽形式。CTF起源于1996年DEFCON全球黑客大會,以代替之前黑客們通過互相發(fā)起真實(shí)攻擊進(jìn)行技術(shù)比拼的方式。已經(jīng)成為全球范圍網(wǎng)絡(luò)安全圈流行的競賽形式,2013年全

    2024年02月08日
    瀏覽(24)
  • 一篇文章帶你快速認(rèn)識區(qū)塊鏈(必看)

    一篇文章帶你快速認(rèn)識區(qū)塊鏈(必看)

    ? ? ? ?區(qū)塊鏈技術(shù),這一劃時(shí)代的分布式賬本技術(shù),正在全球范圍內(nèi)掀起一場深度的信任與協(xié)作模式變革。區(qū)塊鏈如同一部由多方共同維護(hù)的公開而又安全的大賬本,每一筆交易都被打包成一個(gè)區(qū)塊,通過高級密碼學(xué)手段確保傳輸和訪問安全,并按照時(shí)間順序串聯(lián)起來,形

    2024年04月25日
    瀏覽(34)
  • 【云原生】什么是云原生?如何學(xué)習(xí)云原生?一篇文章帶你了解云原生

    【云原生】什么是云原生?如何學(xué)習(xí)云原生?一篇文章帶你了解云原生

    云原生,相信這個(gè)名詞大家并不陌生;云原生在近期可謂是爆火,伴隨云計(jì)算的滾滾浪潮,云原生(CloudNative)的概念應(yīng)運(yùn)而生,云原生很火,火得一塌糊涂??墒乾F(xiàn)在很多人還是不知道什么是云原生,所以今天我們就來聊一聊近期很火的這個(gè)名詞:云原生吧 。 大家平時(shí)經(jīng)常提

    2024年02月02日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包