您好,登錄后才能下訂單哦!
這篇文章給大家介紹將項(xiàng)目語(yǔ)言從Python轉(zhuǎn)向Go的5個(gè)原因分別是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
前言
Python是一個(gè)非常受歡迎的語(yǔ)言。但在企業(yè)世界中,能打的go并沒(méi)有給人任何生存的機(jī)會(huì)。
如果你明白了這句話的意思,那么你可能已經(jīng)嘗試過(guò)或者看過(guò)Go編程語(yǔ)言。我認(rèn)為它是最簡(jiǎn)單的編程語(yǔ)言,可以適用于任何類型的應(yīng)用程序開(kāi)發(fā)。
是的!你沒(méi)看錯(cuò),對(duì)我來(lái)說(shuō)go比JavaScript還好學(xué)。我認(rèn)為這是go語(yǔ)言在幾年之內(nèi)變得如此流行的主要原因。
下面我們對(duì)比一下Python和Go。
那么我們?cè)谑褂肎o之前有什么
這是我們的Python技術(shù)堆棧:
Dashboard前端的response .js
Django Python用于儀表板后端+身份驗(yàn)證服務(wù)
用于API服務(wù)的Node.js
PostgreSQL用于數(shù)據(jù)庫(kù),Cassandra用于日志記錄
自定義書(shū)面集裝箱注冊(cè)與Rust語(yǔ)言
正如您所看到的,整個(gè)基礎(chǔ)設(shè)施是完全基于微服務(wù)的,大部分邏輯完全分離,甚至使用不同的技術(shù)。
這就是我們開(kāi)始考慮將API服務(wù)和后端合并到單個(gè)項(xiàng)目中的主要原因,因?yàn)樗鼈冇泻芏嘞嗨浦?,但是代碼庫(kù)在多種編程語(yǔ)言和技術(shù)上是重復(fù)的。但是我們需要做很多工作來(lái)定制Django的API服務(wù),特別是定制JSON響應(yīng)。
為什么使用Go
正如之前所說(shuō),Go語(yǔ)言是我所見(jiàn)過(guò)和使用過(guò)的最簡(jiǎn)單的語(yǔ)言。但這只是吸引我的第一點(diǎn)。
這里是我們選擇Go而不是Python Django的5個(gè)主要原因
1. 它編譯成單個(gè)二進(jìn)制文件
Golang是作為一種編譯語(yǔ)言構(gòu)建的,谷歌開(kāi)發(fā)人員在這方面做得很好。使用靜態(tài)鏈接,實(shí)際上是將所有依賴庫(kù)和模塊結(jié)合到一個(gè)基于操作系統(tǒng)類型和體系結(jié)構(gòu)的二進(jìn)制文件中。這意味著如果你在你的筆記本電腦上用Linux X86 CPU編譯你的后端應(yīng)用程序,你只需要把編譯好的二進(jìn)制文件上傳到服務(wù)器上,它就會(huì)工作,而不需要在那里安裝任何依賴項(xiàng)!
2. 靜態(tài)類型系統(tǒng)
類型系統(tǒng)對(duì)于大規(guī)模應(yīng)用程序非常重要。Python是一門(mén)偉大而有趣的語(yǔ)言,但有時(shí)你會(huì)遇到不尋常的異常,因?yàn)槟阍噲D把變量當(dāng)作整數(shù)來(lái)使用,結(jié)果卻發(fā)現(xiàn)它是一個(gè)字符串。
# Django will crash process because of this def some_view(request): user_id = request.POST.get('id', 0) # If this post request has "id" parameter then # user_id would be a string, # but you really thinking it is integer User.objects.get(id=user_id)
Go會(huì)在編譯時(shí)作為編譯器錯(cuò)誤讓您知道這個(gè)問(wèn)題。這是你贏得時(shí)間的地方。
3. 性能!
這可能令人驚訝,但在大多數(shù)應(yīng)用程序中,Go比Python(2和3)要快。
在我們的案例中,由于Go的并發(fā)模型和CPU可伸縮性,他的性能更好。每當(dāng)我們需要處理一些內(nèi)部請(qǐng)求時(shí),我們就用單獨(dú)的Goroutine來(lái)處理它,它在資源上比Python線程便宜10倍。因此,我們節(jié)省了大量的資源(內(nèi)存、CPU),因?yàn)檎Z(yǔ)言的內(nèi)置特性。
4. 你不需要網(wǎng)絡(luò)框架
這是編程語(yǔ)言最棒的地方。Go語(yǔ)言的創(chuàng)造者和社區(qū)已經(jīng)構(gòu)建了許多由語(yǔ)言核心支持的工具,在大多數(shù)情況下,你真的不需要任何第三方庫(kù)。例如,它有http、json、html模板是用本地語(yǔ)言構(gòu)建的,你可以構(gòu)建非常復(fù)雜的API服務(wù),甚至不需要在Github上查找?guī)?
但是,當(dāng)然有很多為Go構(gòu)建的庫(kù)和框架,以及使用Go構(gòu)建web應(yīng)用程序,但是我建議在不使用任何第三方庫(kù)的情況下構(gòu)建web應(yīng)用程序或API服務(wù),因?yàn)樵诖蠖鄶?shù)情況下,它們并不比使用本地包更容易。
5. 偉大的IDE支持和調(diào)試
當(dāng)您試圖切換編程語(yǔ)言時(shí),IDE支持是最重要的事情之一。舒適的IDE平均可以節(jié)省80%的編碼時(shí)間。我發(fā)現(xiàn)了JetBrains IDEA的Go插件,它也支持(Webstorm, PHPStorm等)。這個(gè)插件提供了項(xiàng)目開(kāi)發(fā)所需的一切,利用JetBrains的強(qiáng)大功能,您可以真正促進(jìn)開(kāi)發(fā)。
根據(jù)我們的代碼庫(kù)統(tǒng)計(jì),在重寫(xiě)所有要運(yùn)行的項(xiàng)目之后,我們得到的代碼比以前少了64%。
Go為我們提供了巨大的靈活性,為所有的用例提供了單一的語(yǔ)言,并且對(duì)所有的用例都非常有效。我們的后端和API服務(wù)的性能提高了30%?,F(xiàn)在我們可以實(shí)時(shí)處理日志記錄,將其傳輸?shù)綌?shù)據(jù)庫(kù),并使用Websocket從單個(gè)或多個(gè)服務(wù)進(jìn)行流處理!這是Go語(yǔ)言特性的一個(gè)很好的結(jié)果。
關(guān)于將項(xiàng)目語(yǔ)言從Python轉(zhuǎn)向Go的5個(gè)原因分別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。