Golang的错误处理

272 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

Golang的错误处理

go语言中的错误处理是十分有个性的,我们总能在go语言的代码中看到这么一行if error !=nil{ resperr() return},这就是在判断是否报普通错误。

错误处理

Go 没有像 Java 和 .NET 等一些语言那样的 try/catch 异常机制,也就意味着,go语言不能执行抛异常操作。因为go语言的设计师认为,使用try/catch太过于泛滥,而且从底层向更高级抛出异常非常消耗资源, 因此设计师们设计了一套 defer-panic-and-recover 机制,使得GO语言也能捕获异常并且更加的 轻量。

如何处理异常

通过在函数和方法中返回错误对象作为它们的唯一或最后一个返回值,如果返回的值是nil,则没有错误发生——并且主调(calling)函数总是应该检查收到的错误。

  • 代码示例
// GetClient为函数和方法名,返回一个值和err
client, err := GetClient()
// 判断是否出现错误,如果err不是nil,则打印错误
if err != nil {
   fmt.Println(err)
 
   return
}

定义错误

任何时候当你需要一个新的错误类型,都可以用 errors (必须先 import引入)包的 errors.New 函数接收合适的错误信息来创建。

  • 代码示例
//引入errors包
import  "errors" 
err := errors.New(“数学错误-分母不能为0”) //尽量使用英文,本人英语不好
//或者
var err error= errors.New(“数学错误-分母不能为0”)

panic和运行异常

当发生像数组下标越界、类型断言失败(一般类型不一致导致断言失败)这样的运行错误时,Go 运行时会触发运行时 panic,伴随着程序的崩溃抛出一个 runtime.Error 接口类型的值。这个错误值有个 RuntimeError() 方法用于区别普通错误。

panic :当错误条件很严苛且不可恢复,程序不能继续运行时,可以使用 panic 函数产生一个中止程序的运行时错误。 panic 接收一个做任意类型的参数,通常是字符串,在程序死亡时被打印出来。Go 运行时负责中止程序并给出调试信息。

  • 代码示例
func main(){
    fmt.Println("程序正常运行")
    panic("程序死亡")
    fmt.Println("这一切都结束了,加班改错吧!!!")
}