[譯]爲何你應該學習Go語言?(下)

原文地址 git

Go能夠直接在基礎硬件上運行

與其餘的現代高級語言相比,如 Java 或 Python,使用 C、C++ 的最大優點,就在於性能,由於 C/C++ 均爲編譯型語言,而非解釋型語言。(擴展:如何理解編譯型語言、解釋型語言?)github

對於處理器來講,能夠直接識別運行的是二進制文件。對於咱們熟知的現代高級語言,當你編譯一個用 Java 或者其餘基於 JVM 的語言構建的應用程序時,它不會直接生成二進制文件,而是將人類可讀的代碼編譯爲字節代碼,這些字節代碼能夠被 JVM 或者在底層操做系統之上運行的其餘虛擬機所理解。當須要真正執行的時候,由虛擬機解釋這些字節碼,再將他們轉化爲處理器能理解的二進制文件。golang

對於 C/C++ 這類編譯型語言來講,在執行週期中省略了編譯爲字節代碼這一步來提升性能,不依賴 VM(虛擬機) 執行,而是直接將人類可讀的代碼編譯爲二進制文件。算法

雖然 C/C++ 這類語言的性能優點明顯,可是,在這些語言中釋放和分配變量是一件極其痛苦的事情。而大部分現代高級編程語言在這方面又是具備優點的,它們會使用垃圾回收器或者引用計數的算法來處理對象的分配和移除。編程

那麼有沒有一種語言,可以取兩家之長呢?服務器

Go 偏偏作到了一箭雙鵰,Go 像一些底層語言(如:C/C++ )同樣,是一門編譯型語言,這意味着它的性能幾乎接近於底層語言,它實現了垃圾回收來分配和刪除對象。所以,再也不須要使用 malloc() 和 free() 聲明瞭!這太酷了!架構

Go 項目易於維護

我要告訴你一件事情,Go 沒有像其餘語言同樣複雜的編程語法,Go 的編程語法簡潔明瞭。併發

Google 的 Go 語言的設計者,在建立這門語言的時候就考慮到了這一點。因爲 Google 擁有龐大的代碼庫,成千上萬的開發人員都工做在同一個代碼庫上,因此對於項目外的其餘開發人員而言,代碼應該易於理解,而且代碼間的耦合也應該儘可能小。只有這樣,才能使代碼易於維護和修改。編程語言

Go 有意摒棄了一些現代面向對象編程語言的功能特性。post

  • 沒有類概念。 全部事務均使用 package 分隔,使用結構體來替代類概念。
  • 不支持繼承。這使得代碼易於修改。在 Java 或者 Python 之類的其餘語言中,若是類ABC繼承了類XYZ,當開發者對類XYZ進行修改後,則有可能會對繼承XYZ的其餘類產生反作用。經過摒棄繼承,也使得代碼更易於理解(由於在查看一段代碼時,沒有超類)
  • 沒有構造方法
  • 沒有註解
  • 沒有泛型
  • 沒有異常

上述改變使得 Go 與其餘語言大相徑庭,而且使 Go 的編程體驗也與其餘語言不一樣。你可能不喜歡這些改變,可是仔細想一想,離開了這些繁雜的編程語法,就沒有辦法編寫應用程序了麼? 你可能要作的,就只是再多寫2–3行來適應而已。但從積極的方面來講,這些改變將使你的代碼更加的整潔、準確、易讀。

從上圖能夠看出,Go 幾乎與 C/C++ 同樣高效,同時,代碼語法也可以像 Ruby、Python 同樣簡單。因此對於開發者和處理器性能來講,這是共贏的!

與 Swift 等其餘新語言不一樣 ,Go 的語法體系很是穩定。自2012年首次公開發布1.0版以來,它一直保持不變。這使得 Go 能夠向後兼容。

Go 獲得了 Google 的支持。

  • 我知道這並非直接的技術優點。可是,Google 擁有世界上最大的雲基礎架構之一,而且已經擁有了至關大的規模。Go 是由 Google 設計、支持的,旨在解決他們在支持可擴展性和有效性方面的問題。而這些問題,都是你在建立本身的服務器時將會遇到的。
  • 除此之外,諸如Adobe,BBC,IBM,Intel甚至Medium等一些大公司也在使用Go。( Source)

結論

  • 儘管 Go 與其餘面嚮對象語言大相徑庭,但它仍然不容小覷。 Go 不只提供了媲美 C/C++ 同樣的高性能,還提供瞭如同 Java 般的高效併發處理,與此同時,還能爲你帶來和 Python/Perl 同樣的編程樂趣。
  • 若是你仍是沒有學習 Go 的計劃,那我再強調一遍,硬件限制將會給開發者編寫高性能程序帶來巨大壓力。開發者須要對硬件有所瞭解,以此來對程序進行優化,使得優化後的軟件,能夠在更廉價、更慢的硬件設備(好比 IOT 設備)上運行,而且使終端用戶在總體上得到更好的使用體驗。
相關文章
相關標籤/搜索