第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編寫沒有泛型的泛型錯誤處理函數(shù)

編寫沒有泛型的泛型錯誤處理函數(shù)

Go
慕桂英546537 2021-09-21 20:44:37
我知道 Go 將來不會有泛型,并且有一些建議可以用其他構(gòu)造替換它們。但是在我下面的例子中,我被卡住了。func P(any interface{}, err error) (interface{}) {    if err != nil {        panic("error: "+ err.Error())    }    return any}正如您可能猜到的那樣,我試圖在任何錯誤上失敗,并希望將P()任何返回兩個結(jié)果的函數(shù)放在一起,而第二個是錯誤。這工作正常,但any丟失了它的類型信息,結(jié)果中只是一個空接口。因為我也在調(diào)用 lib 函數(shù),所以我沒有看到用接口或反射來解決這個問題的方法。有任何想法嗎?我是完全在錯誤的軌道上還是接近目標(biāo)?
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗 獲得超10個贊

一種解決方案是針對go generate您的P()功能,針對您需要使用的每種具體類型。
請參閱以下示例:

  • "使用 "?go generate"?"在 Go 中進(jìn)行通用編程。

  • “喬肖/根根”

  • “厚臉皮/珍妮”

  • “剪刀屋/一代”

  • “在 Go 中實現(xiàn)類型泛型函數(shù),不使用反射”

這將使調(diào)用這些 lib 函數(shù)變得更容易,因為生成的具體 P() 實現(xiàn)將使用正確的類型而不是 interface{}。


查看完整回答
反對 回復(fù) 2021-09-21
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊

您想要做的需要泛型,但正如您已經(jīng)提到的,Go 不支持泛型類型。因此,您無法創(chuàng)建不會丟失類型的通用函數(shù)。

您必須為要支持的每種類型創(chuàng)建這樣的函數(shù)。請注意,標(biāo)準(zhǔn)庫已經(jīng)包含其中一些名稱為MustXXX(),您可以開箱即用,例如:

template.Must(t *Template, err error) *Template

或者“類似”的功能,它們抑制error但如果仍然發(fā)生,恐慌,例如:

regexp.MustCompile(str string) *Regexperror如果str不是有效的正則表達(dá)式,則抑制但恐慌)


查看完整回答
反對 回復(fù) 2021-09-21
?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊

如果您計劃只是對錯誤感到恐慌(壞主意)或記錄它們,那么只需定義一個函數(shù)來執(zhí)行此操作并使用它。例如


func checkErr(err error) {

    if err != nil {

        log.Println(err)

    }

}


// ...


func foo() {

    a, err := doA()

    checkErr(err)

    b, err := doB()

    checkErr(err)

    // etc.

}

用戶 twotwotwo 已經(jīng)鏈接到Errors are values文章,該文章展示了更多關(guān)于如何減少錯誤處理重復(fù)性的示例。但我建議只寫整個if err != nil事情,因為根據(jù)我的經(jīng)驗,每三個錯誤,如果不是第二個,都需要一些額外的處理。


查看完整回答
反對 回復(fù) 2021-09-21
  • 3 回答
  • 0 關(guān)注
  • 240 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號