亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如果沒有錯誤則返回 Golang

如果沒有錯誤則返回 Golang

Go
桃花長相依 2022-01-04 21:13:27
在Golang中,是否可以運行該函數err, value := function()if err == nil {  return value}而不是這樣做:err, value := function()if err != nil {  panic(err)}return err如果有,是否有任何時間優勢/獎金?這不是非致命錯誤。我正在嘗試將某些內容轉換為不同類型,但我不確定應該使用哪種類型。
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

恐慌類似于異常,但不會傳遞給調用者(也就是說,當您調用恐慌時,它會立即發生;您無需等待)。您應該使用代碼的第一個示例,您可以在其中嘗試操作、失敗并繼續。


func main() {

    s1 := rand.NewSource(time.Now().UnixNano())

    r1 := rand.New(s1)


    // Generate some random numbers, and call into add()

    for i := 0; i < 10; i++ {

        s, err := add(r1.Intn(100), r1.Intn(100))

        if err != nil {

            fmt.Println(err)

            continue

        }

        fmt.Println(s)

    }

}


// Error if we get a sum over 100

func add(a int, b int) (int, error) {

    s := a + b

    if s > 100 {

        return s, errors.New("Hey doofus, error!")

    }

    return s, nil

}

如果你在這個例子中恐慌,你就大功告成了(試試它——而不是返回一個錯誤做恐慌(“一些錯誤”)。但是相反,我們確定有一個錯誤,我們可以嘗試生成另一個隨機數字。


就像其他人所說的那樣,如果您有一個無法恢復的用例(假設您試圖從文件中讀取,但文件不在那里),您可能會決定最好恐慌。但是如果你有一個長時間運行的進程(比如一個 API),你會想要繼續攪動,盡管有任何錯誤。


GoPlay 在這里:http ://play.golang.org/p/ThXTxVfM6R


OP 用用例更新了他的帖子——他正在嘗試轉換為一種類型。如果你在這個函數中恐慌,你會死在水里。相反,我們想要返回一個錯誤,讓調用者決定如何處理錯誤。以此為例:


func interfaceToString(i interface{}) (string, error) {

    if i == nil {

        return "", errors.New("nil interface")

    }


    switch i.(type) {

    case string:

        return i.(string), nil

    case float64:

        return strconv.Itoa(int(i.(float64))), nil

    case int:

        return strconv.Itoa(i.(int)), nil

    }


    return "", errors.New(fmt.Sprintf("Unable to convert %v", i))

}

GoPlay 在這里:http ://play.golang.org/p/7y7v151EH4


查看完整回答
反對 回復 2022-01-04
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號