Go語言和其它程式語言的對比

2020-07-16 10:05:18
在軟體行業做過一段時間的人都知道,沒有萬能的程式語言,也沒有萬能開發框架,更沒有萬能的解決方案。任何新技術的產生都應該歸功於一部分人對老舊技術的強烈不滿。Go語言也不例外。比如,C語言的依賴管理、C++ 的垃圾回收、Java 笨重的型別系統和厚重的 Java EE 規範,以及指令碼語言(如 PHP、Python 和 Ruby)的效能,這些都是很多開發者社群經常爭論和抱怨的問題。

Go語言的優勢

Go語言是集多程式設計正規化之大成者,體現了優秀的軟體工程思想和原則,其特性可以使開發者快速地開發、測試和部署程式,大大提高了生產效率。下面我們來看看與其他主流語言相比,Go語言具有的優勢。

1) 相對於 C/C++ 來講,Go語言擁有清晰的依賴管理和全自動的垃圾回收機制,因此其程式碼量大大降低,開發效率大大提高。

2) 相對於 Java 來講,Go語言擁有簡明的型別系統、函數語言程式設計正規化和先進的併行程式設計模型。因此其程式碼塊更小更簡潔、可重用性更高,並可在多核計算環境下更快地執行。

3) 對於 PHP 來講,Go語言更具通用性和規範性。這使得其更適合構建大型的軟體,並能夠更好地將各個模組組織在一起。在效能方面,PHP 不可與 Go 同日而語。

4) 對於 Python/Ruby 來講,Go 的優勢在於其簡潔的語法、非侵入式和扁平化的型別系統和渾然天成的多正規化程式設計模型。與 PHP 一樣,Python 和 Ruby 也是動態型別的直譯語言,這就意味著它們的執行速度會比靜態型別的編譯型語言慢很多。

總而言之,Go語言對於當前大多數主流語言來講,最大的優勢在於具有較高的生產效率、先進的依賴管理和型別系統,以及原生的併行計算支援。因此,Go語言自發布以來就受到了各個領域開發者的關注和青睞。

Go語言的劣勢

下面,我們來客觀地看一下目前Go語言需要加強或改進的地方(雖然有些 Gopher 並不這麼認為)。

1) 從分散式計算的角度來看,Go語言的成熟度不及 Erlang(現在已經出現了一些這方面的Go語言程式碼包,我們已經可以看到光明的未來了)。

2) 從程式執行速度的角度來看,Go語言雖然已與 Java 不相上下,但還不及 C(差距正在不斷地縮小)。

3) 從第三方庫的角度來看,Go語言的庫數量還遠遠不及其他幾門主流語言(比如 Java、Python、Ruby 等)。不過與Go語言的年紀相比,用它實現的第三方庫已經相當多了,並且它們的數量在持續地飛速增長中。

另外,在更深的層面,Go語言標準庫中也有些不盡如人意的的地方,具體如下。

1) 從語言語法角度來看,Go語言語法裡的語法糖並不多,這讓許多 Python、Ruby 愛好者們對它不屑一顧。另外,變數賦值方式多得有點兒累贅了。最讓人遺憾的也是我比較在意的一個地方是,Go語言不支援自定義的泛型型別。

2) 從並行程式設計角度來看,Go語言提供的並行模型很強大,但也有一些編寫規則需要了解。否則,很容易踩進“坑”裡。其實不提倡把這叫作“坑”。因為這些所謂的“坑”,大都是我們由於對原理不熟悉而自己挖出來的。

3) 從垃圾回收角度看,Go語言的垃圾回收採用的是並行的標記清除演算法(Concurrent Mark and Sweep,CMS)。雖然是並行的操作,時間比序列操作短很多,但是還是會在垃圾回收期間停止所有使用者程式的操作。這一點多少會影響到對實時性要求比較高的應用。不過,在Go語言 1.3 之後的版本中,這方面的問題已經得到了極大的改善。

雖然Go語言還有一些瑕疵,但從整體來看,它已經是一門非常優秀的通用程式語言了。並且,Go語言在今後的發展上會關注效能、可靠性、可移植性和一些功能增強,所以上述缺憾會隨著版本的推進而逐漸減弱和消失。