Go 錯誤處理,一直是個必爭之地。為什麼不學 Rust 使用 ?
來解決錯誤處理的問題,也是大家非常好奇的地方。
為此 Go 核心團隊成員之一 @Robert Griesemer 給出了官方詮釋和解答。以下為其解答的內容。
Go 的設計非常注重可讀性!
我們希望即使是不熟悉該語言的人也能理解 Go 程式碼(這並不意味著每個名稱都需要不言自明;畢竟我們還有語言規範)。
截止目前為止,我們已經避免了在 Go 語言中引入各種的神秘縮寫或符號,包括不常見的運算子,例如:?
,因為這些符號的含義是模糊或不明顯的。
一般來說,語言定義的識別符號要麼是完全拼寫的(例如:package、interface、if、append、recover 等)。要麼是簡寫的(例如:struct、var、func、int、len、imag 等)。當然,簡寫的版本也需要確保明確和易於理解。
而 Rust 引入 ?
是爲了緩解 try
和鏈式語句的問題。而在 Go 中,這個問題要小得多,因為 Go 中的語句往往更簡單,鏈式語句(相對於巢狀)也不常見。
如果 Go 要使用 ?
將需要在語言中引入一個新的字尾運算子。這將需要一個新的標記和新的語法,並需要對大量軟體包(掃描器、解析器等)和工具進行修改和開發。
這也會使 Go 未來的修改變得更加困難。而如果未來錯誤處理使用內建函式來姐姐,則可以消除所有這些問題,同時保持設計的靈活性。
這也是為什麼 Go 將不會學 Rust 使用 ?
來做錯誤處理的原因。