1. 語言的特性#
Go 語言從本質上(程序和結構方面)來實現並發編程。
因為 Go 語言沒有類和繼承的概念,所以它和 Java 或 C++ 看起來並不相同。但是它通過介面 (interface) 的概念來實現多態性。Go 語言有一個清晰易懂的輕量級類型系統,在類型之間也沒有層級之說。因此可以說這是一門混合型的語言。
在傳統的面向對象語言中,使用面向對象編程技術顯得非常臃腫,它們總是通過複雜的模式來構建龐大的類型層級,這違背了編程語言應該提升生產力的宗旨。
函數是 Go 語言中的基本構件,它們的使用方法非常靈活。在第六章,我們會看到 Go 語言在函數式編程方面的基本概念。
Go 語言使用靜態類型,所以它是類型安全的一門語言,加上通過構建到本地代碼,程序的執行速度也非常快。
作為強類型語言,隱式的類型轉換是不被允許的,記住一條原則:讓所有的東西都是顯式的。
Go 語言其實也有一些動態語言的特性(通過關鍵字 var),所以它對那些逃離 Java 和 .Net 世界而使用 Python、Ruby、PHP 和 JavaScript 的開發者們也具有很大的吸引力。
Go 語言支持交叉編譯,比如說你可以在運行 Linux 系統的計算機上開發運行 Windows 下運行的應用程序。這是第一門完全支持 UTF-8 的編程語言,這不僅體現在它可以處理使用 UTF-8 編碼的字符串,就連它的源碼文件格式都是使用的 UTF-8 編碼。Go 語言做到了真正的國際化!
2. 用途#
Go 語言被設計成一門應用於搭載 Web 伺服器,存儲集群或類似用途的巨型中央伺服器的系統編程語言。對於高性能分佈式系統領域而言,Go 語言無疑比大多數其他語言有著更高的開發效率。它提供了海量並行的支持,這對於遊戲服務端的開發而言是再好不過了。
Go 語言一個非常好的目標就是實現所謂的複雜事件處理(CEP),這項技術要求海量並行支持,高度的抽象化和高性能。當我們進入到物聯網時代,CEP 必然會成為人們關注的焦點。
但是 Go 語言同時也是一門可以用於實現一般目標的語言,例如對於文本的處理,前端展現,甚至像使用腳本一樣使用它。
值得注意的是,因為垃圾回收和自動內存分配的原因,Go 語言不適合用來開發對實時性要求很高的軟體。
越來越多的谷歌內部的大型分佈式應用程序都開始使用 Go 語言來開發,例如谷歌地球的一部分代碼就是由 Go 語言完成的。
如果你想知道一些其他組織使用 Go 語言開發的實際應用項目,你可以到 使用 Go 的組織 頁面進行查看。出於隱私保護的考慮,許多公司的項目都沒有展示在這個頁面。我們將會在第 21 章 討論到一個使用 Go 語言開發的大型存儲區域網絡 (SAN) 案例。
在 Chrome 瀏覽器中內置了一款 Go 語言的編譯器用於本地客戶端 (NaCl),這很可能會被用於在 Chrome OS 中執行 Go 語言開發的應用程序。
Go 語言可以在 Intel 或 ARM 處理器上運行,因此它也可以在安卓系統下運行,例如 Nexus 系列的產品。
3. 特性缺失#
許多能夠在大多數面向對象語言中使用的特性 Go 語言都沒有支持,但其中的一部分可能會在未來被支持。
為了簡化設計,不支持函數重載和操作符重載
為了避免在 C/C++ 開發中的一些 Bug 和混亂,不支持隱式轉換
Go 語言通過另一種途徑實現面向對象設計(第 10-11 章)來放棄類和類型的繼承
儘管在介面的使用方面(第 11 章)可以實現類似變體類型的功能,但本身不支持變體類型
不支持動態加載代碼
不支持動態鏈接庫
不支持泛型
通過 recover () 和 panic () 來替代異常機制(第 13.2-13.3 節)
不支持靜態變量。
小結#
這裡列舉一些 Go 語言的必殺技:
簡化問題,易於學習
內存管理,簡潔語法,易於使用
快速編譯,高效開發
高效執行
並發支持,輕鬆駕馭
靜態類型
標準類庫,規範統一
易於部署
文檔全面
免費開源