【Go - 异常 / 错误值 】

在Go语言中,异常处理的方式与其他语言(如Java或Python)有所不同。Go不使用异常机制,而是采用了错误处理模式,即通过返回值来传递和处理错误。

以下是Go中处理错误的常见方式:

  1. 返回错误值:函数返回两个值,第一个是结果值,第二个是错误值。如果发生错误,错误值将不为nil。这是Go中最常见的错误处理方式。

    package main
    
    import (
        "errors"
        "fmt"
    )
    
    func doSomething(value int) (int, error) {
        if value < 0 {
            return 0, errors.New("value cannot be negative")
        }
        return value * 2, nil
    }
    
    func main() {
        result, err := doSomething(-1)
        if err != nil {
            fmt.Println("Error:", err)
        } else {
            fmt.Println("Result:", result)
        }
    }
    
    
  2. 自定义错误类型:通过实现error接口,定义自己的错误类型。

    package main
    
    import (
        "fmt"
    )
    
    type MyError struct {
        Code    int
        Message string
    }
    
    func (e *MyError) Error() string {
        return fmt.Sprintf("Error %d: %s", e.Code, e.Message)
    }
    
    func doSomething(value int) (int, error) {
        if value < 0 {
            return 0, &MyError{Code: 123, Message: "value cannot be negative"}
        }
        return value * 2, nil
    }
    
    func main() {
        result, err := doSomething(-1)
        if err != nil {
            fmt.Println("Error:", err)
        } else {
            fmt.Println("Result:", result)
        }
    }
    
    
  3. 使用panicrecoverpanic用于在程序遇到严重错误时终止程序的执行,recover用于捕获panic,从而恢复正常执行。使用panicrecover要谨慎,因为它们会打破正常的控制流,增加代码的复杂度。

    package main
    
    import (
        "fmt"
    )
    
    func doSomething(value int) {
        if value < 0 {
            panic("value cannot be negative")
        }
        fmt.Println("Value:", value)
    }
    
    func main() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("Recovered from panic:", r)
            }
        }()
        doSomething(-1)
        fmt.Println("This line will not be printed if panic is not recovered")
    }
    
    

在Go中,推荐使用返回错误值的方式来处理错误,而不是使用panicrecover,因为后者更适用于处理不可恢复的错误情境。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值