為什麽不用Go語言?
今年早些時候,我們對比了幾種原生編程語言,包括D、Go、Rust和Vala。這裏我們就來分析壹下來自Google的Go語言,看看它和其他語言有什麽不同。Go語言比許多其他語言更吸引我。雖然我不是Go語言方面的專家,但是我很樂意在這裏介紹壹下它的特性。以下特點指導我去語言。快速簡單的編譯:go編譯很快。事實上,它甚至可以用作腳本語言。有幾個原因讓他編譯很快:他不使用頭文件。當A依賴B and B依賴C時,會先編譯C,再編譯B和A;但是,如果A依賴於B,但是A並不直接依賴於C,而是存在依賴轉移,那麽B需要從C獲取的所有信息都會放在B的對象代碼中。這樣,在編譯a的時候,就不需要擔心c了,在編譯程序的時候,只需要沿著依賴樹向上遍歷類型信息。如果到達樹的頂部,那麽只需要編譯下壹個依賴項,而不用考慮其他級別的依賴項。通過多個返回值的錯誤處理:現代編程語言基本上有兩種錯誤處理方法,比如在C語言中使用返回值,在Java等面向對象語言中異常處理返回值,因為返回值的狀態碼可能總是與需要返回的結果相沖突。Go語言允許多個返回值,壹定程度上解決了這個問題。妳可以為妳的函數的執行結果狀態定義返回值,隨時調用都可以檢查,非常方便。簡單組合:可以用接口為對象指定某些類型的成員,也可以像Java壹樣為它們指定操作(行為)。比如在標準庫的io包中定義了壹個Writer,有壹個以字節數組為參數(輸入),以整數值和錯誤代碼為返回值(輸出)的方法。在io中實現寫方法的類型。實際上執行了編寫器接口。這種設計可以優雅地分離代碼,簡化單元測試過程。例如,如果妳想測試壹個數據庫對象的方法,妳必須用傳統語言創建壹個數據庫對象,然後做大量的協議初始化工作。在Go語言中,妳可以在接口下創建任何對象。簡單並發:Go中的並發變得非常簡單。把字母go放在任何函數前面,函數就會用自己的go-routine(壹個非常輕量級的線程)運行。圍棋程序通過通道相互通信。我們通常會對線程同步和互斥有壹些要求,在Go中很簡單。Go只是啟動並發任務,所有任務通過通道進行通信,協調同步和互斥。出色的錯誤提示:我從來沒有見過其他語言有Go這麽高的錯誤診斷質量。比如妳的程序思考,Go的運行時可以通知妳,它甚至可以告訴妳哪個線程出了問題。當然,編譯錯誤也很詳細,很有用。其他特性:Go語言還有其他非常吸引人的特性:高階函數、垃圾收集、哈希映射、可擴展數組等等。當然,沒有什麽是完美的,Go語言的開發工具還很匱乏,社區也很小,但是這種語言背後的支持者是Google,這些問題會壹步步解決。當其他語言,尤其是D,Rust,Vala,以簡化C++和增加新特性為目標的時候,感覺都像是增加了新特性的C++。Go語言更多的是反思壹門母語應該是什麽樣子。