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