[golang] 错误处理Go语言的错误处理方式Go语言 提供了两种错误处理方式:返回错误模式: 函数的返回是一个复合类型,其中一个类型(习惯上是最后一个类型)是 error ,类似于:(, error)。这种模式被期望处理的场景是...
[golang] 错误处理
Go语言的错误处理方式
Go语言 提供了两种错误处理方式:
- 返回错误模式: 函数的返回是一个复合类型,其中一个类型(习惯上是最后一个类型)是
error,类似于:(, error)。
这种模式被期望处理的场景是:当错误发生的情况下,在处理错误后,程序扔可以继续执行下去。
- 中断/恢复模式:
panic/recover
中断/恢复模式适用于:当错误发生的情况下,处理错误后,程序无法继续执行下去,需要中断当前的程序或者协程。
error 接口
Go语言提供了内嵌接口 error,其定义是:
type error interface {
Error() string
}
因此,任何有 Error() string 方法的类型都可以被认为是Error类。
type PathError struct {
Op string // "open", "unlink", etc.
Path string // The associated file.
}
func (e *PathError) Error() string {
return e.Op + " " + e.Path
}
error 返回/处理模式
Go语言中, 当一个错误发生时,希望处理这个错误,然后继续执行。因此默认的错误处理模式是返回包含错误变量的复合结果。
func returnError() (ret interface{}, err error) {
return nil, &PathError{Op: "open", Path: "/root"}
}
func main() {
_, err := returnError()
if err != nil {
...
}
}
panic 和 recover
当错误发生时,程序无法执行下去的时候,这时期望终止程序或者终止当前的协程,在这种情况下,Go语言提供了内嵌函数 panic 。
panic 函数的参数可以是任何类型,一般会使用 string。
recover 用于在上层抓住 panic 中的参数,并做适当的处理。
有趣的是,panic()/recover()有点儿像是 try/catch。
示例:
package main
import "fmt"
// PathError records an error and the operation and
// file path that caused it.
type PathError struct {
Op string // "open", "unlink", etc.
Path string // The associated file.
}
func (e *PathError) Error() string {
return e.Op + " " + e.Path
}
func main() {
defer func() {
if e := recover(); e != nil {
fmt.Println(e)
}
}()
_, err := returnError()
if err != nil {
panic(err.Error())
}
}
func returnError() (ret interface{}, err error) {
return nil, &PathError{Op: "open", Path: "/root"}
}
织梦狗教程
本文标题为:[golang] 错误处理
基础教程推荐
猜你喜欢
- R语言-修改(替换)因子变量的元素操作 2022-11-26
- ruby on rails validates 2023-09-22
- R语言绘制折线图实例分析 2022-11-21
- Ruby3多线程并行Ractor使用方法详解 2023-07-23
- ruby-on-rails-为使用Rails 4,nginx和乘客的用户设置自定义域 2023-09-21
- Swift中重写和重载的使用与对比总结 2023-07-05
- win10下使用virtualbox + vagrant配置ruby开发机环境 2023-07-23
- 浅析ELF转二进制允许把 Binary 文件加载到任意位置 2023-07-06
- Swift初始化器与可选链的使用方法介绍 2023-07-08
- R语言 ggplot2改变柱状图的顺序操作 2022-11-17
