第 26 章:Error Handling(錯誤處理)

1. 章節(jié)簡介

  • Go 提供 error 接口作為錯誤處理標(biāo)準(zhǔn)方式。
  • 常見方式:返回 error、自定義錯誤類型、panic/recover。

2. 知識點講解

(1) error 類型

type error interface {
    Error() string
}

(2) 返回 error

import "errors"

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

(3) 自定義錯誤

type MyError struct {
    Msg string
}
func (e MyError) Error() string {
    return e.Msg
}

(4) panic/recover

  • panic:程序遇到嚴重錯誤時退出。
  • recover:在 defer 中捕獲 panic,防止程序崩潰。
func mayPanic() {
    panic("Something went wrong")
}

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from:", r)
        }
    }()
    mayPanic()
    fmt.Println("Program continues")
}

3. 代碼示例

package main

import (
    "errors"
    "fmt"
)

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    res, err := divide(10, 2)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Result:", res)
    }

    res, err = divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
    }
}

4. 練習(xí)任務(wù)

  1. 寫函數(shù) openFile(filename string),當(dāng)文件不存在時返回錯誤。
  2. 使用 panic/recover 捕獲異常,保證程序繼續(xù)運行。
  3. 嘗試實現(xiàn)一個自定義錯誤類型,包含錯誤代碼和消息。

5. 小結(jié)

  • error 是接口,所有錯誤都實現(xiàn) Error() 方法。
  • 錯誤處理推薦方式是 返回 error,而不是異常機制。
  • panic/recover 用于極端情況,不是常規(guī)錯誤處理方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容