Go 還缺少什么,能更完美?
大家好,我是煎魚。
最近國外社區 reddit 對 Go 這一門編程語言發起了一次討論,提問的標題大致意思是:“你們認為 Go 還缺少什么,能讓它變得更完美?”。
圖片
內容上主要是方向是:開發人員對 Go 中缺少什么的看法,希望在 Go 中看到什么特性,能夠使得其比現在要更好。
這些交流點,在日常讀者群中也經常有同學提到。今天結合分享給大家。
社區覺得缺少什么
在我查看帖子時,得到最多人點贊的是以下兩個功能。感覺挺工程和務實,都是日常寫業務代碼常用的:
- 空值檢查:希望 Go 編譯器能可靠地告訴開發者是否忘記了空值檢查,進行適當的提示。
- 通用數據結構和函數:希望 Go 能夠提供更多的通用數據結構和函數。
基于空值檢查的變型,也有同學提出希望 Go 要能夠支持這種特性:允許變量聲明為允許空值或不允許空值。
如下偽代碼:
final String? aNullableString = null;
final String aNonNullableString = "Can't be null";
以此達到這個效果:如果將可空變量分配給不可空變量,則編譯器會直接拋出錯誤,不給編譯通過。
其次各類網友各抒己見,希望 Go 還要有以下幾個經典功能:
- 枚舉(Enums)
- 范圍迭代器(Range iterators),這個正在實驗中了。預計 Go1.23 支持,指日可待。
- 三元運算符(Ternary operator)
- 缺省值(例如:結構體的字段可以設置缺省值)
- 泛型方法(更復雜和完善的泛型功能支持)
- 更好的錯誤處理機制
- 不可變的數據結構類型支持
一些爭論點
當然有些人喜歡,想要這些特性。也會有人評論回復認為有所爭議。
例如以下三點:
- 錯誤處理:Go 的錯誤處理機制被指為冗長易錯,有的開發者希望類似 try-catch 的結構,但官方和一些開發者認為違反了 Go 的簡潔設計哲學。
- 不可變數據結構:有的開發者希望內置不可變數據結構,以此幫助并發編程和減少錯誤,但又會增加語言的復雜性。
- 標準庫的擴展:有的開發者希望 Go 的標準庫能含更多高級功能,例如:GUI。但有人認為標準庫應保持精簡,以避免臃腫。
總結
今天我們提到了社區里經常反饋期望支持的功能特性,雖然很多被打回了許多次,但有個別像范圍迭代器也是已經在路上的了。
設計一門編程語言,如果沒有基本準則和目標,利弊還是較難權衡的。根據前文的內容,你最希望要有的功能特性是哪個呢?