go語言的優(yōu)勢和劣勢是什么

這篇“go語言的優(yōu)勢和劣勢是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“go語言的優(yōu)勢和劣勢是什么”文章吧。

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

go語言的缺點:1、技術(shù)路線選擇導(dǎo)致的“性能劣勢”,go屬于GC類編程語言,在一些性能超級敏感的場合,選擇Go依然要慎重。2、表達(dá)方法單一”、顯式的錯誤處理有點“過時”。3、最小版本選擇MVS,背離主流。4、Go核心團(tuán)隊對語言演化的把控力十足,不是社區(qū)多數(shù)人贊同的就一定會被采納而加入Go語言,導(dǎo)致在社區(qū)上有劣勢,Go社區(qū)與Go核心團(tuán)隊有“裂痕”。5、功能孱弱。

每種編程語言都有自己的優(yōu)勢和劣勢,Go也不例外,下面我們就來列舉一下Go的那些“優(yōu)勢”和“劣勢”:

Go優(yōu)勢

1、簡單易學(xué)

Go語言語法簡單,其中包含了類似C語言的語法。如果讀者已經(jīng)掌握了兩到三門編程語言,那么學(xué)習(xí)Go語言只需要幾天的時間。即使是一名剛?cè)腴T的開發(fā)者,花幾個星期也能寫出性能較高的Go語言程序。

2、自由高效

Go語言的編譯速度明顯優(yōu)于 Java 和 C++,還擁有接近C語言的運行效率以及接近 PHP 的開發(fā)效率,可以說Go語言將運行效率和開發(fā)效率進(jìn)行了完美的融合。

同時,Go語言還支持當(dāng)前所有的編程范式,包括過程式編程、面向?qū)ο缶幊獭⒚嫦蚪涌诰幊?、函?shù)式編程。開發(fā)者們可根據(jù)需求自由組合。

3、強大的標(biāo)準(zhǔn)庫

Go里面的標(biāo)準(zhǔn)庫非常穩(wěn)定并且豐富多樣,包括網(wǎng)絡(luò)、系統(tǒng)、加密、編碼、圖形等各個方面。尤其是網(wǎng)絡(luò)和系統(tǒng)的庫非常實用,使得開發(fā)者在開發(fā)大型程序時,幾乎無須依賴第三方庫。

4、部署方便

不需要使用虛擬機,Go語言的代碼可以直接輸出為二進(jìn)制可執(zhí)行文件。而且Go語言擁有自己的鏈接器,不依賴任何系統(tǒng)提供的編譯器和鏈接器。因此編譯出的二進(jìn)制可執(zhí)行文件幾乎可以運行在任何系統(tǒng)環(huán)境中。

5、原生支持并發(fā)

Go語言是一種非常高效的語言,從語言層原生支持并發(fā),使用起來非常簡單。Go語言的并發(fā)是基于 Goroutine 的,Goroutine 類似于線程,但并非線程,是Go語言面向線程的輕量級方法。創(chuàng)建 Goroutine 的成本很低,只需幾千個字節(jié)的額外內(nèi)存。

通常一臺普通的桌面主機運行上百個線程就會負(fù)載過大,而同樣的主機卻可以運行上千甚至上萬個 Goroutine。Goroutine 之間可以通過 channel 實現(xiàn)通信。Goroutine 以及基于 channel 的并發(fā)性方法可最大限度地使用 CPU 資源。

6、穩(wěn)定性強

Go語言擁有強大的編譯檢查、嚴(yán)格的編碼規(guī)范和很強的穩(wěn)定性,此外Go語言還提供了軟件生命周期(如開發(fā)、測試、部署、維護(hù)等)的各個環(huán)節(jié)的工具,例如:go tool、go fmt、go test 等。

7、垃圾回收

在使用Go語言進(jìn)行開發(fā)時,在內(nèi)存方面開發(fā)者只需要關(guān)注內(nèi)存的申請即可,并不需要關(guān)系內(nèi)存的釋放,因為Go語言內(nèi)置了 runtime 來自動進(jìn)行管理。雖然目前來說 GC(Garbage Collection,垃圾回收機制)不算完美,但是足以應(yīng)付開發(fā)時遇到的大多數(shù)情況,使開發(fā)者可以將更多精力集中在業(yè)務(wù)上,同時Go語言也允許開發(fā)者對此項工作進(jìn)行優(yōu)化。

Go的劣勢

1. 技術(shù)路線選擇導(dǎo)致的“性能劣勢”

眾所周知,Go是帶垃圾回收的編程語言,因此不管Go的STW(Stop The World)的時間有多么短,GC的延遲有多么的小,它依然屬于GC類編程語言,和Java、C#屬于一個陣營,同時天然與C、C++、Rust這樣的手動管理內(nèi)存、沒有運行時GC負(fù)擔(dān)的編程語言之間劃清了界線。雖然Go語言的初衷是成為系統(tǒng)級編程語言,雖然Go的運行時性能可以滿足99.99%的場合的需要,雖然百度的萬億流量[轉(zhuǎn)發(fā)引擎BFE]、時序數(shù)據(jù)庫[influxdb]、分布式關(guān)系數(shù)據(jù)庫[TiDB]等性能敏感的項目都選擇了用Go實現(xiàn),但不能否認(rèn)的是在一些性能超級敏感的場合,選擇Go依然要慎重。

2 堅持自己的設(shè)計哲學(xué)所帶來的“表達(dá)劣勢”

1) “單一”的表達(dá)方法

很多從其他語言轉(zhuǎn)到Go陣營的開發(fā)人員抱怨Go能玩的花樣太少,套路不多,Go之所以表現(xiàn)出“表達(dá)劣勢”,源于其設(shè)計哲學(xué)中的一個原則:“崇尚一個事情只有一個或少數(shù)幾種寫法”。這個原則不符合某些開發(fā)人員炫技的心理需求,于是Go就被詬病為是資質(zhì)平平的程序員才會去用的語言。

[Go 1.18將加入泛型(類型參數(shù))],這算是對此類“劣勢”的一個“彌補”。不過對于我們這些對Go價值觀和設(shè)計哲學(xué)認(rèn)同已久的Gopher而言,我們十分擔(dān)心大幅提高Go表達(dá)能力的[泛型]將成為奇技淫巧的“滋生地”。

2) “過時”的顯式的錯誤處理

Go語言從誕生那天起就沒有像C++、Java、Python等主流編程語言那樣提供基于異常(exception)的結(jié)構(gòu)化try-catch-finally錯誤處理機制,Go的設(shè)計者們認(rèn)為[將異常耦合到程序控制結(jié)構(gòu)中會導(dǎo)致代碼混亂]。Go提供了一種簡單的基于錯誤值比較的錯誤處理機制,這“強迫”每個Go開發(fā)人員都必須顯式地去關(guān)注和處理每個錯誤,經(jīng)過顯式錯誤處理的代碼會更為健壯,也會讓Go開發(fā)人員對這些代碼更有信心。但這一設(shè)計哲學(xué)的堅持卻被很多來自其他語言的開發(fā)者嘲笑為“過時”,被稱為“半個世紀(jì)前的古老機制”。(筆者注:十九世紀(jì)70年代C語言誕生時采用的錯誤處理機制)

Go開發(fā)團(tuán)隊也曾“動搖過”,Go開發(fā)團(tuán)隊在發(fā)布Go2計劃后曾發(fā)布過多版[Go錯誤處理的新機制草案]。Go社區(qū)也針對此問題做過長時間的討論甚至是“爭吵”,知名Gopher Dave Cheney發(fā)聲、Rob Pike發(fā)聲,著名Go培訓(xùn)師、《Go語言實戰(zhàn)》聯(lián)合作者之一的威廉·肯尼迪(William Kennedy)更是在Go團(tuán)隊try 提案公示之后,發(fā)表了對Go社區(qū)的公開信反對try方案,最終堅持Go設(shè)計哲學(xué)的一派占據(jù)了上風(fēng),try提案被否決,沒有加入到[Go 1.13版本]中!

3. 背離主流的“小眾劣勢”

Go早期設(shè)計的包依賴管理機制的確存在不小的“瑕疵”,這源于Google內(nèi)部大單一代碼倉庫與基于主干的開發(fā)模型的影響。走出Google的Go語言聽到了不同方面的聲音,Go包管理機制長期無法滿足社區(qū)的需求。于是先后出現(xiàn)了[vendor機制]、[dep]等對包依賴管理的改進(jìn)嘗試。

2018 年初,正當(dāng)廣大gopher們認(rèn)為dep將“順理成章”地升級為go官方工具鏈的一部分的時候,Go核心團(tuán)隊的技術(shù)負(fù)責(zé)人,也是Go 核心團(tuán)隊早期成員之一的Russ Cox在個人博客上連續(xù)發(fā)表了[七篇文章],系統(tǒng)闡述了Go團(tuán)隊解決“包依賴管理” 的技術(shù)方案: [vgo],即go module的前身。

vgo的主要思路包括:語義導(dǎo)入版本 (Semantic Import Versioning)、 最小版本選擇 (Minimal Version Selection) ,這些都與當(dāng)前主流編程語言的包依賴管理的規(guī)則相悖,尤其是[最小版本選擇(MVS)],算是另辟蹊徑,背離主流!

4. Go核心團(tuán)隊的“民主集中制”導(dǎo)致的“社區(qū)劣勢”

和Rust團(tuán)隊廣泛采納社區(qū)建議“猛加語言特性”不同,Go像是另外一個極端:Go核心團(tuán)隊對語言演化的把控力十足,不是社區(qū)多數(shù)人贊同的就一定會被采納而加入Go語言,我這里將其戲稱為“民主集中制”吧,即真正的投票權(quán)其實在Go核心團(tuán)隊的代表社區(qū)的少數(shù)人手中。

2018年初的dep與vgo之爭就是這一“劣勢”的典型表現(xiàn)。社區(qū)費勁一年多努力精心打造的dep項目被Russ Cox等少數(shù)人集中花掉一些時間設(shè)計出的vgo給“擠出”了Go包依賴管理工具標(biāo)準(zhǔn)的位置,成為了Go module成功的“墊腳石”。即便最終證明Go團(tuán)隊使用go module的決策的結(jié)果是正確的,但 這導(dǎo)致的Go社區(qū)與Go核心團(tuán)隊的“裂痕”是確確實實存在的,以致于這兩年Go核心團(tuán)隊極力改善與Go社區(qū)的關(guān)系,規(guī)范化和透明化Go proposal的提出、review和接納流程。

5. 全面出擊失敗后,期望的落空導(dǎo)致的“功能孱弱劣勢”

Go 1.5發(fā)布之后,由于實現(xiàn)了自舉和GC延遲的大幅下降,Go受關(guān)注程度逐漸升高,直至2017年初第二次拿到TIOBE年度最佳編程語言,讓Go語言有些“膨脹”,甚至狂熱的Go鼓吹者曾一度希望Go一統(tǒng)江湖:不僅牢牢把持住自己的云原生市場,占領(lǐng)Java的企業(yè)級市場,還要在終端(android. ios)、前端(js)上擊敗現(xiàn)有對手。

有人可能覺得我的上述說法可笑,但這些說法并非空穴來風(fēng)。Go語言在終端、前端方面還真的曾經(jīng)發(fā)過力,了解Go歷史的都知道,Go團(tuán)隊曾經(jīng)有全職開發(fā)人員參與[gomobile項目](,該項目旨在構(gòu)建在Android和iOS上的Go技術(shù)棧,實現(xiàn)用Go語言編寫終端應(yīng)用的目的。

在前端方面,[gopherjs項目]可以將go代碼編譯為js代碼并運行于各大瀏覽器中。后來gopherjs的作者又幫助go項目原生支持webassembly,支持將go編譯為webassembly運行在瀏覽器中。

但上面的嘗試最終沒能“得償如愿”,現(xiàn)狀是在終端、前端應(yīng)用領(lǐng)域,使用Go編碼的人少之又少。于是Go又逐漸冷靜下來,回到自己擅長的主力戰(zhàn)場,回歸到了企業(yè)級應(yīng)用、基礎(chǔ)設(shè)施、中間件、微服務(wù)、命令行應(yīng)用等領(lǐng)域,并且在這些領(lǐng)域取得了越來越多開發(fā)者的青睞。

但曾經(jīng)的全面出擊失敗給很多開發(fā)者留下了“Go功能孱弱”的口實,甚至有人說[親爹Google]也沒能讓親兄弟Android給Go走個后門。

以上就是關(guān)于“go語言的優(yōu)勢和劣勢是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章名稱:go語言的優(yōu)勢和劣勢是什么
標(biāo)題網(wǎng)址:http://bm7419.com/article26/ijhsjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、App設(shè)計、電子商務(wù)、網(wǎng)站建設(shè)、小程序開發(fā)、ChatGPT

廣告

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

網(wǎng)站托管運營