[譯]想成爲一個出色的Web工程師?學Golang而非Node.js。

原文:medium.com/codezillas/…前端

Nodejs是一個運行時或者說是一個Javascript代碼運行時的環境,而Golang是一門編程語言但不只僅用於後端開發。Golang是由Google於2007年發明的。Nodejs能讓Javascript代碼運行在服務端上,而Golang適用於服務器端編寫代碼。Nodejs代碼也就是Javascript的代碼,因此繼承了大量的Javascript特性。Javascript在當下是如此的流行,以致於ECMAScript標準主要是改進性地前行而不是顛覆性地進行。Golang能夠被認爲是從c/c++這些更保守的語言上的進化。Golang核心結構的創建是在C和Python的基本準則之上的。node

咱們接下來會對比一下Golang與Nodejs的優缺點,從而讓你更好地選擇在接下來的工做裏面該選誰。linux

性能

  • Golang:與c/c++差很少的性能特性,能夠說是很是出色了。c++

  • Nodejs:若是從原始性能上來講,Golang和Nodejs比較是相對公平的。 原始性能即CPU沒有額外的負荷,Golang和Nodejs在這方面都相對展現相對使人滿意的效果,可是Golang在實際運行性能可能會更好,由於服務端運行時候的性能都各類因素的影響。golang


併發

  • Golang:Golang使用一種併發模型叫「Goruntinues」。Goruntinues容許多個協程同時運行,輕鬆靠譜地完成併發任務。web

  • Nodejs:Nodejs是單線程的,意味着執行任務是順序執行的。在大規模擴展的同時須要處理多個並行任務在同一時間可能會出現一些致命的弱點。Javascript容許利用事件回調的方式來處理併發,但這種方式並非足夠的高效。編程


可擴展性

  • Golang:Golang自己就是爲了可擴展以及高併發場景設計的,因此沒有太多的阻礙。
  • Nodejs:已經有不少使用Nodejs的人或者公司聲稱Node在大規模擴展的環境會有出現一些問題。可能Node能夠在之後去修復這個問題。

開發成本

  • Golang:Golang算是一門比較新的語言而且尚未開始徹底流行起來,因此須要作好要查閱大量資料以及手動配置的心理準備。
  • Nodejs:Nodejs有成百個第三庫,上千份的指引,一大堆的第三方平臺。龐大的Javascript社區近幾年來一直有很是大的貢獻,使其能在各類現實場景中都能完成任務。


錯誤處理

  • Golang:Golang要求程序進行常規的顯式錯誤檢查以及返回錯誤代碼。這種作法看起來有點困難,然而這實際上是一個更好的保持應用程序一致性的方法,這能使得應用程序更加可靠。
  • Nodejs:Nodejs使用throw/catch模型,當錯誤發生的時候當即觸發進行捕獲。這是一個更加傳統的錯誤處理方法,不少編程語言也是使用相同的方法。因此應用程序的一致性就會有點欠缺。

曬圖

2017年一個StackOverflow的開發者調查報告裏面顯示Golang位居前五在全世界頂級付費技術裏面。

Golang vs Nodejs 基準任務性能

Golang: go version go1.10 linux/amd64後端

Node js :- v9.4.0安全

在比較了Golang與Nodejs各個方面之後,其實咱們很難去說誰比誰更加出色,他們都有各自的閃光點以及缺點。在性能方面來講,Golang彷佛比Nodejs更加可靠,但同時你也應該從項目大小,項目結構,以及業務類型等各類方面去比較做出考量。服務器


譯者補充

這部份內容並非原文全部,本文翻譯的內容並不表明我本身的觀點,只是這篇原文在Medium上比較熱門因此我翻譯了過來能夠供你們討論。我自己是一個Nodejs以及前端的開發者超過3年了,最近在用Golang練習一些後端的項目也斷斷續續有幾個月了。我很是喜歡Nodejs/Javascript的靈活性,雖然這也是被許多人詬病的地方。另外是這篇裏面說到的併發比較只是簡單說了Js的回調而沒有提到事件循環,雖然Nodejs是單線程但正是有了事件循環,因此其在處理併發上也是足夠高效的。但另外一方面,Golang的Go rutines設計配合channel在併發狀況性能確實很是高效,而正由於其不是單線程的特性,因此還會引伸出共享資源競爭以及併發安全的問題,迫使我本身要去關注和處理以及考慮更多的狀況在實際使用中,也能夠所以接觸到更多操做系統或者是更加底層的知識和概念,而不是簡單的CRUD。我以爲Nodejs和Golang都有其各自的閃光點。個人建議是,若是你是一位Nodejs的後端工程師,但願另外再接觸學習一門靜態語言,但願更加底層地處理和熟悉高併發場景的話,我認爲Golang是一個很是不錯的選擇。

相關文章
相關標籤/搜索