2 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
是否可以在語句期間忽略 error 變量來執(zhí)行類似操作?
不,Go沒有為這樣的東西提供任何語言結(jié)構(gòu)。
(但你可以有自己的必須...函數(shù),如您將在包正則表達(dá)式或文本/模板中找到的函數(shù)。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
免責(zé)聲明(我的觀點(diǎn)):這個(gè)答案只是為了好玩。我不建議使用這個(gè)。忽略錯(cuò)誤是不好的,試圖壓縮每一行代碼都是愚蠢的。這只是說明了一些關(guān)于Go如何處理多個(gè)返回值的有趣概念,我在寫這篇文章時(shí)學(xué)到了一些新東西,所以我想我會(huì)分享。
相關(guān):這個(gè)問題更實(shí)際的表親是“Must模式”,由一些標(biāo)準(zhǔn)庫(包括模板)使用。它涉及獲取值和錯(cuò)誤,如果錯(cuò)誤不是nil,則返回該值。請(qǐng)參閱此(當(dāng)前凍結(jié)的)提案panic
您需要一個(gè)包裝器函數(shù)來執(zhí)行此操作。多個(gè)返回值將自動(dòng)展開以填充參數(shù)。
請(qǐng)參閱此示例,它與add()
func ignoreError(i int, err error) int {
return i
}
叫:
foo := ""
foo += strconv.Itoa(ignoreError(add(1, 2)))
下面是一個(gè)更通用的替代方法,它將從另一個(gè)函數(shù)中獲取任意數(shù)量的值并返回第一個(gè)值。
func takeFirstValue(v ...interface{}) interface{} {
if len(v) == 0 {
return nil
}
return v[0]
}
叫:
foo := ""
foo += strconv.Itoa(takeFirstValue(add(1, 2)).(int))
此選項(xiàng)需要在調(diào)用站點(diǎn)進(jìn)行強(qiáng)制轉(zhuǎn)換以還原數(shù)據(jù)類型,因?yàn)?takeFirstValue 返回 。.(int)interface{}
- 2 回答
- 0 關(guān)注
- 90 瀏覽
添加回答
舉報(bào)