原文地址 git
與其餘的現代高級語言相比,如 Java 或 Python,使用 C、C++ 的最大優點,就在於性能,由於 C/C++ 均爲編譯型語言,而非解釋型語言。(擴展:如何理解編譯型語言、解釋型語言?)github
對於處理器來講,能夠直接識別運行的是二進制文件。對於咱們熟知的現代高級語言,當你編譯一個用 Java 或者其餘基於 JVM 的語言構建的應用程序時,它不會直接生成二進制文件,而是將人類可讀的代碼編譯爲字節代碼,這些字節代碼能夠被 JVM 或者在底層操做系統之上運行的其餘虛擬機所理解。當須要真正執行的時候,由虛擬機解釋這些字節碼,再將他們轉化爲處理器能理解的二進制文件。golang
對於 C/C++ 這類編譯型語言來講,在執行週期中省略了編譯爲字節代碼這一步來提升性能,不依賴 VM(虛擬機) 執行,而是直接將人類可讀的代碼編譯爲二進制文件。算法
雖然 C/C++ 這類語言的性能優點明顯,可是,在這些語言中釋放和分配變量是一件極其痛苦的事情。而大部分現代高級編程語言在這方面又是具備優點的,它們會使用垃圾回收器或者引用計數的算法來處理對象的分配和移除。編程
那麼有沒有一種語言,可以取兩家之長呢?服務器
Go 偏偏作到了一箭雙鵰,Go 像一些底層語言(如:C/C++ )同樣,是一門編譯型語言,這意味着它的性能幾乎接近於底層語言,它實現了垃圾回收來分配和刪除對象。所以,再也不須要使用 malloc() 和 free() 聲明瞭!這太酷了!架構
我要告訴你一件事情,Go 沒有像其餘語言同樣複雜的編程語法,Go 的編程語法簡潔明瞭。併發
Google 的 Go 語言的設計者,在建立這門語言的時候就考慮到了這一點。因爲 Google 擁有龐大的代碼庫,成千上萬的開發人員都工做在同一個代碼庫上,因此對於項目外的其餘開發人員而言,代碼應該易於理解,而且代碼間的耦合也應該儘可能小。只有這樣,才能使代碼易於維護和修改。編程語言
Go 有意摒棄了一些現代面向對象編程語言的功能特性。post
上述改變使得 Go 與其餘語言大相徑庭,而且使 Go 的編程體驗也與其餘語言不一樣。你可能不喜歡這些改變,可是仔細想一想,離開了這些繁雜的編程語法,就沒有辦法編寫應用程序了麼? 你可能要作的,就只是再多寫2–3行來適應而已。但從積極的方面來講,這些改變將使你的代碼更加的整潔、準確、易讀。
從上圖能夠看出,Go 幾乎與 C/C++ 同樣高效,同時,代碼語法也可以像 Ruby、Python 同樣簡單。因此對於開發者和處理器性能來講,這是共贏的!
與 Swift 等其餘新語言不一樣 ,Go 的語法體系很是穩定。自2012年首次公開發布1.0版以來,它一直保持不變。這使得 Go 能夠向後兼容。