Go語言做者之一 Robert Griesemer前幾天表明Go語言開發團隊的提案審查委員會公佈了關於否決一項提案的決定。Robert在「內置的Go錯誤檢查函數,"try"」提案下面的回覆中發佈了這個公告,並表示基於社區壓倒性的反應和由此引發的普遍討論,團隊決定提早拒絕此項提案。git
關於Go 2的錯誤處理問題,Robert表示團隊去年就已闡述了對此的見解,但當時並沒引發足夠的注意和討論。因此關於"try"語句的提案多是解決此問題的一個很好的解決方案,但對於大多數使用者而言,這可能沒解決到什麼問題。github
下面舉一個try語句的示例。golang
例如以下代碼:bash
f, err := os.Open(filename)
if err != nil {
return …, err // zero values for other results, if any
}複製代碼
可經過使用try語句簡化爲:函數
f := try(os.Open(filename))
ui
能夠看到,內置函數try採用一個單一表達式做爲參數。表達式必須求出 n+1 個值(其中n可能爲零),其中最後一個值必須是error類型。若是錯誤參數(final)爲nil,則返回前n個值(若是有),不然返回帶有該錯誤的封閉函數。spa
這種方法最主要的缺點是須要對錯誤結果參數進行命名,爲此可能會致使API不夠美觀。總而言之,一開始try看起來就有點不尋常,由於它只是針對一個特定任務量身定製的語法糖,使用較少的樣板代碼進行錯誤處理,而且能足夠好地處理該任務。不過它很是符合Go的哲學——try不是爲解決全部錯誤處理狀況而設計的;它旨在很好地處理最多見的狀況,以保持設計簡單明瞭。設計