为什么你应该学习Go语言?
目錄
- 一、為什么互聯(lián)網(wǎng)世界需要Go語言
- 二、硬件限制:摩爾定律已然失效
- 三、Go語言為并發(fā)而生
- 四、Go性能強(qiáng)悍
- 五、Go語言簡(jiǎn)單易學(xué)
- 5.1 語法簡(jiǎn)潔
- 5.2 代碼風(fēng)格統(tǒng)一
- 5.3 開發(fā)效率高
- 六、學(xué)習(xí)Go語言的前景
更新、更全的《Go從入門到放棄》的更新網(wǎng)站,更有python、go、人工智能教學(xué)等著你:https://www.cnblogs.com/nickchen121/p/11517502.html
?
終于等到你!Go語言——讓你用寫Python代碼的開發(fā)效率編寫C語言代碼。
一、為什么互聯(lián)網(wǎng)世界需要Go語言
世界上已經(jīng)有太多太多的編程語言了,為什么又出來一個(gè)Go語言?
二、硬件限制:摩爾定律已然失效
摩爾定律:當(dāng)價(jià)格不變時(shí),集成電路上可容納的元器件的數(shù)目,約每隔18-24個(gè)月便會(huì)增加一倍,性能也將提升一倍。 換言之,每一美元所能買到的電腦性能,將每隔18-24個(gè)月翻一倍以上。
從上面的圖表可以看出,近十年單線程性能和處理器頻率保持穩(wěn)定。我們不能像之前一樣把添加更多晶體管當(dāng)成是解決方案,因?yàn)樵谳^小規(guī)模上一些量子特性開始出現(xiàn)(如隧道效應(yīng)),并且因?yàn)樵谕瑯有〉目臻g里放置更多晶體管的代價(jià)非常昂貴,每1美元可以添加的晶體管數(shù)量開始下降。
制造商開始從其他方面提高處理器的性能:
但上述解決方案也有其自身的局限性。因?yàn)槌杀驹蛭覀儾荒軣o限制的為計(jì)算機(jī)添加內(nèi)核,也無法無限制的添加緩存來提高性能,因?yàn)榫彺嬖酱?#xff0c;取值的性能越低。
我們沒有辦法在硬件上一直取得突破,我們需要提高軟件的性能或者說我們需要高性能的軟件。
三、Go語言為并發(fā)而生
如上所述,硬件制造商正在為處理器添加越來越多的內(nèi)核以提高性能。所有數(shù)據(jù)中心都在這些處理器上運(yùn)行,更重要的是,今天的應(yīng)用程序使用多個(gè)微服務(wù)來維護(hù)數(shù)據(jù)庫(kù)連接,消息隊(duì)列和維護(hù)緩存。因此,開發(fā)的軟件和編程語言應(yīng)該可以輕松地支持并發(fā)性,并且應(yīng)該能夠隨著CPU核心數(shù)量的增加而可擴(kuò)展。
但是,大多數(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)勢(shì),Go語言從底層原生支持并發(fā),無須第三方庫(kù)、開發(fā)者的編程技巧和開發(fā)經(jīng)驗(yàn)。
很多公司,特別是中國(guó)的互聯(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)營(yíng)的市場(chǎng)大環(huán)境。
Go語言的并發(fā)是基于?goroutine?的,goroutine?類似于線程,但并非線程。可以將?goroutine?理解為一種虛擬線程。Go 語言運(yùn)行時(shí)會(huì)參與調(diào)度?goroutine,并將?goroutine?合理地分配到每個(gè) CPU 中,最大限度地使用CPU性能。開啟一個(gè)goroutine的消耗非常小(大約2KB的內(nèi)存),你可以輕松創(chuàng)建數(shù)百萬個(gè)goroutine。
goroutine的特點(diǎn):
四、Go性能強(qiáng)悍
與其他現(xiàn)代高級(jí)語言(如Java/Python)相比,使用C,C++的最大好處是它們的性能。因?yàn)镃/ C++是編譯型語言而不是解釋的語言。 處理器只能理解二進(jìn)制文件,Java和Python這種高級(jí)語言在運(yùn)行的時(shí)候需要先將人類可讀的代碼翻譯成字節(jié)碼,然后由專門的解釋器再轉(zhuǎn)變成處理器可以理解的二進(jìn)制文件。??同C,C++一樣,Go語言也是編譯型的語言,它直接將人類可讀的代碼編譯成了處理器可以直接運(yùn)行的二進(jìn)制文件,執(zhí)行效率更高,性能更好。??數(shù)據(jù)來源:https://benchmarksgame-team.pages.debian.net/benchmarksgame/
可以看出,Go 語言在性能上更接近于 Java 語言,雖然在某些測(cè)試用例上不如經(jīng)過多年優(yōu)化的 Java 語言,但畢竟 Java 語言已經(jīng)經(jīng)歷了多年的積累和優(yōu)化。Go 語言在未來的版本中會(huì)通過不斷的版本優(yōu)化提高單核運(yùn)行性能。
五、Go語言簡(jiǎn)單易學(xué)
5.1 語法簡(jiǎn)潔
Go 語言簡(jiǎn)單易學(xué),學(xué)習(xí)曲線平緩,不需要像 C/C++ 語言動(dòng)輒需要兩到三年的學(xué)習(xí)期。Go 語言被稱為“互聯(lián)網(wǎng)時(shí)代的C語言”。Go 語言的風(fēng)格類似于C語言。其語法在C語言的基礎(chǔ)上進(jìn)行了大幅的簡(jiǎn)化,去掉了不需要的表達(dá)式括號(hào),循環(huán)也只有 for 一種表示方法,就可以實(shí)現(xiàn)數(shù)值、鍵值等各種遍歷。
5.2 代碼風(fēng)格統(tǒng)一
Go 語言提供了一套格式化工具——go fmt。一些 Go 語言的開發(fā)環(huán)境或者編輯器在保存時(shí),都會(huì)使用格式化工具進(jìn)行修改代碼的格式化,這樣就保證了不同開發(fā)者提交的代碼都是統(tǒng)一的格式。(吐槽下:再也不用擔(dān)心那些看不懂的黑魔法了…)
5.3 開發(fā)效率高
?Go語言實(shí)現(xiàn)了開發(fā)效率與執(zhí)行效率的完美結(jié)合,讓你像寫Python代碼(效率)一樣編寫C代碼(性能)。
六、學(xué)習(xí)Go語言的前景
目前Go語言已經(jīng)?泛應(yīng)用于人工智能、云計(jì)算開發(fā)、容器虛擬化、?數(shù)據(jù)開發(fā)、數(shù)據(jù)分析及科學(xué)計(jì)算、運(yùn)維開發(fā)、爬蟲開發(fā)、游戲開發(fā)等領(lǐng)域。
Go語言簡(jiǎn)單易學(xué),天生支持并發(fā),完美契合當(dāng)下高并發(fā)的互聯(lián)網(wǎng)生態(tài)。Go語言的崗位需求持續(xù)高漲,目前的Go程序員數(shù)量少,待遇好。
抓住趨勢(shì),要學(xué)會(huì)做一個(gè)領(lǐng)跑者而不是跟隨者。
國(guó)內(nèi)Go語言的需求潛力巨大,目前無論是國(guó)內(nèi)大廠還是新興互聯(lián)網(wǎng)公司基本上都會(huì)有Go語言的崗位需求。
下圖是應(yīng)用Go語言的公司舉例:
除了上面列出的大廠外,很多小型公司或創(chuàng)業(yè)公司也開始使用Go語言,并且很多公司把Go語言作為其主要開發(fā)語言。
現(xiàn)在就開始你的Go語言學(xué)習(xí)之旅吧!人生苦短,let’s Go.
來源:https://www.cnblogs.com/nickchen121/p/11517463.html
總結(jié)
以上是生活随笔為你收集整理的为什么你应该学习Go语言?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 7/8 安装 onigur
- 下一篇: 【php】使用gdb调试php程序