根據 Go 開發(fā)團隊和基本的算法測試,Go 語言與 C 語言的性能差距大概在 10%~20% 之間( 譯者注:由于出版時間限制,該數(shù)據應為 2013 年 3 月 28 日之前產生 )。雖然沒有官方的性能標準,但是與其它各個語言相比已經擁有非常出色的表現(xiàn)。
如果說 Go 語言的執(zhí)行效率大約比 C++ 慢 20% 也許更有實際意義。保守估計在相同的環(huán)境和執(zhí)行目標的情況下,Go 程序比 Java 或 Scala 應用程序要快上 2 倍,并比這兩門語言占用的內存降低了 70% 。在很多情況下這種比較是沒有意義的,而像谷歌這樣擁有成千上萬臺服務器的公司都拋棄 C++ 而開始將 Go 用于生產環(huán)境才足夠說明它本身所具有的優(yōu)勢。
時下流行的語言大都是運行在虛擬機上,如:Java 和 Scala 使用的 JVM,C# 和 VB.NET 使用的 .NET CLR。盡管虛擬機的性能已經有了很大的提升,但任何使用 JIT 編譯器和腳本語言解釋器的編程語言(Ruby、Python、Perl 和 JavaScript)在 C 和 C++ 的絕對優(yōu)勢下甚至都無法在性能上望其項背。
如果說 Go 比 C++ 要慢 20%,那么 Go 就要比任何非靜態(tài)和編譯型語言快 2 到 10 倍,并且能夠更加高效地使用內存。
其實比較多門語言之間的性能是一種非常猥瑣的行為,因為任何一種語言都有其所擅長和薄弱的方面。例如在處理文本方面,那些只處理純字節(jié)的語言顯然要比處理 Unicode 這種更為復雜編碼的語言要出色的多。有些人可能認為使用兩種不同的語言實現(xiàn)同一個目標能夠得出正確的結論,但是很多時候測試者可能對一門語言非常了解而對另一門語言只是大概明白,測試者對程序編寫的手法在一定程度也會影響結果的公平性,因此測試程序應該分別由各自語言的擅長者來編寫,這樣才能得到具有可比性的結果。另外,像在統(tǒng)計學方面,人們很難避免人為因素對結果的影響,所以這在嚴格意義上并不是科學。還要注意的是,測試結果的可比性還要根據測試目標來區(qū)別,例如很多發(fā)展十多年的語言已經針對各類問題擁有非常成熟的類庫,而作為一門新生語言的 Go 語言,并沒有足夠的時間來推導各類問題的最佳解決方案。如果你想獲取更多有關性能的資料,請訪問 Computer Language Benchmark Game(詳見引用 27)。
這里有一些評測結果:
比較 Go 和 Python 在簡單的 web 服務器方面的性能,單位為傳輸量每秒:
原生的 Go http 包要比 web.py 快 7 至 8 倍,如果使用 web.go 框架則稍微差點,比 web.py 快 6 至 7 倍。在 Python 中被廣泛使用的 tornado 異步服務器和框架在 web 環(huán)境下要比 web.py 快很多,Go 大概只比它快 1.2 至 1.5 倍(詳見引用 26)。
根據 Robert Hundt(2011 年 6 月,詳見引用 28)的文章對 C++、Java、Go 和 Scala,以及 Go 開發(fā)團隊的反應(詳見引用 29),可以得出以下結論: