直接誇一波Go語言
GO作為編程界的小鮮肉。進年來Go社區非常的活躍,高並發能力無人能及。即具有像Python一樣的簡潔代碼、開發速度,又具有C語言一樣的執行效率,優勢突出。
還是從根本去了解Go語言吧
1、設計Go語言是為了解決當時Google開發遇到的問題:
- 大量的C++代碼,同時又引入了Java和Python
- 成千上萬的工程師
- 數以萬計行的代碼
- 分布式的編譯系統
- 數百萬的服務器
2、Google開發中的痛點:
- 編譯慢
- 失控的依賴
- 每個工程師只是用了一個語言里面的一部分
- 程序難以維護(可讀性差、文檔不清晰等)
- 更新的花費越來越長
- 交叉編譯困難
3、如何解決當前的問題和痛點?
- Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。
- 所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。
- 但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最后根據實戰經驗,他們向着目標設計了Go這個語言。
4、Go語言的特色:
- 沒有繼承多態的面向對象
- 強一致類型
- interface不需要顯式聲明(Duck Typing)
- 沒有異常處理(Error is value)
- 基於首字母的可訪問特性
- 不用的import或者變量引起編譯錯誤
- 完整而卓越的標准庫包
- Go內置runtime(作用是性能監控、垃圾回收等)
語法對比
功能 | Java | GO |
---|---|---|
封裝 | class 關鍵字組織對象,所有方法和字段都定義在類內 | struct 關鍵字組織對象,struct內可以有字段和方法(方法組織形式不是字節在struct內聲明),也允許方法和字段脫離方法之外,這些方法屬於包| |
函數重載 | 允許函數重載 | Go上不允許函數重載,必須具有方法和函數的唯一名稱 |
多態 | Java通過類繼承或接口來實現多態 | Go 只能通過接口來實現多態 |
繼承 | 支持 | 不支持。Go語言的繼承通過匿名組合完成,基類以Struct的方式定義,子類只需要把基類作為成員放在子類的定義中 |
訪問權限 | 支持public、protected、private、默認等幾種權限 | 通過大小寫控制包外可訪問還是不可訪問 |
值引用和地址引用 | 基礎類型是值引用,其他對象是地址引用 | 所有對象默認是值應用,在對象前加&表示地址引用 |
接口 | 提倡先定義,后實現 | Duck typing方式,在使用時抽象出接口,有點先實現后抽象。Go 的 interface 寫起來更自由,無需顯式實現,只要實現了與 interface 所包含的所有函數簽名相同的方法即可。 |