1. 程式人生 > >Go語言相對於C++的優點

Go語言相對於C++的優點

實用 c、c++ r語 功能 不必要 高級 構造函數、析構函數 圖片 更多

Go語言是Google公司在2009年開源的一門高級編程語言,它為解決大型系統開發過程中的實際問題而設計,支持並發、規範統一、簡單優雅,被很多Go語言傳道者譽為“互聯網時代的C語言”。而C++語言誕生於1979年,可以將C++語言視為一個語言聯邦,主要包含C語言(面向過程)、面向對象、STL容器和算法、範型編程(模板)4部分,它高效強大同時又臃腫復雜,目前最流行的是C++11標準,它的很多優化為C++註入了新的活力。

谷歌出品,必屬精品。Go語言流行至今,大有顛覆C++和Java在大型系統開發中的霸主地位的趨勢,這篇文章簡要分析Go語言相對於C++的優點,內容主要來自個人感悟,如有不對的地方還請朋友們批評指正。

1、語法規範。Go語言實現了語法規範的高度統一,例如Go語言規定大寫字母開頭是公開類型,而小寫字母開頭是私有類型,真正做到了語言規範的最高境界之“望文知義”。而在C++開發代碼裏沒有這樣的規定,因此看到一個類的成員變量名稱,還需要跳轉到類的定義才能確定它的訪問級別。Go語言強制規定了語法規範(不符合規範的代碼無法編譯通過),在工程中非常實用。

2、接口設計。Go語言的核心是組合而不是繼承,Go語言支持面向對象,但是不支持繼承。因此在用Go語言設計程序時不需要考慮基類的設計,它的接口設計更為靈活,只需要專註每個類應該實現的功能。而C++語言支持繼承,很多面試官都喜歡問為什麽基類的析構函數一定要是virtual的?public繼承和private繼承的區別是什麽?在Go語言裏,這些都統統不復存在。

3、開發工具。Go語言作為Google的親兒子,它提供了編譯、測試、調試、性能分析等一系列標準工具,它的編譯效率極高,原生支持單元測試,支持調試和代碼檢查、性能分析等等,是一個名副其實的工程化開發語言;在C++中需要借助各種各樣的開源工具來組合達到這個目標,其中用於C++程序性能分析的工具gperftools就是Google開源的。

4、支持並發。Go語言被設計為支持並發,可以通過go關鍵字創建N個goroutine(一種用戶態線程)來實現並發,同時提供多個goroutine的同步機制,例如當N個goroutine都執行完畢才繼續執行。而C++需要借助第三方框架來實現並發功能,例如線程池+異步調用(一般由第三方RPC框架提供)。Go語言提供語言層面的並發支持,可以輕松的開發出並發框架。

5、內存管理。Go語言和Java、python、lua一樣,都不需要程序員管理內存。而有經驗的C++程序員看到別人代碼裏的new就害怕,因為不知道有沒有相應的delete,還有就是在哪裏delete的,會不會執行不到等等,總之是為內存管理這樣無趣又痛苦的事情耗費精力,雖然有auto_ptr、shared_ptr這樣的資源管理神器,但是語言本身是沒有禁止原生的new/delete的,擔心內存泄漏是一件很不爽的事情。

6、defer語句。Go語言提供defer語句來保證釋放資源,例如在某個函數中打開一個文件後,通過defer filer.Close()來保證關閉文件操作一定會在函數結束時執行,而在C++中想做到這一點需要一些技巧,例如運用goto跳轉,或者封裝一個文件資源管理器。這點可以看出Go語言設計的多麽貼心。

7、語法簡潔。Go的關鍵字更少,同時砍掉了很多不必要的功能,例如構造函數、析構函數(Go語言為每個對象賦予初始值,負責自動內存回收)。Go語言不需要每一行代碼都以分號結尾,python和lua也是這樣。

8、函數支持多返回值。Go語言的函數支持返回多個值,例如返回計算結果數據和錯誤值,python和lua也都都支持這一特點,而在C++只支持單返回值,需要增加函數參數來達到同樣的目的,所以有時候C++函數有很多參數的原因,是因為有的參數被設計為出參。

9、內置標準庫。Go語言提供了http、json、xml、正則表達式等很多後端系統開發中常用的庫,而C++需要使用很多第三方的庫,其缺點是在技術選型上花費一些時間和精力,或者花費更多精力自己造輪子。

10、運行效率。Go語言作為一個編譯型語言,它的運行效率是很高的,遠遠高出解釋型的語言,不過當然沒有高質量的C++代碼程序運行效率高。問題是寫出高質量C++代碼需要付出相當大的努力,這對於很多有經驗的C++程序員來說都是一件十分困難的事。

總結:Go語言是一門工程化、現代化的開發語言,吸取了C、C++、Java、python、lua等眾多語言的優點和長處,它為程序開發者考慮了很多,同時做了很多貼心的設計,目前非常成功和流行;C++語言語言的優勢仍然在於它的運行效率,但是在開發體驗和開發效率上已經落後其他語言,C++11、C++14、C++17等標準的推進也是為了讓C++語言能夠變的更好,適應新的開發潮流,但是它畢竟背負著沈重的歷史包袱,想要脫胎換骨是一件很偉大也很困難的事情。

金句分享

思考時,要像一位智者;但講話時,要像一位普通人。

出自《人性的弱點》,作者是戴爾·卡耐基(Dale Carnegie),美國著名人際關系學大師。

解讀:思想要自由,講話要謙虛。

技術分享圖片

技術分享圖片

Go語言相對於C++的優點