前言
本文介绍GO语言异常处理方式。
本文大纲
什么是错误 错误是什么?
错误指的是可能出现问题的地方出现了问题。比如打开一个文件时失败,这种情况在人们的意料之中 。
而异常指的是不应该出现问题的地方出现了问题。比如引用了空指针,这种在人们的意料之外。可见,错误是业务过程的一部分,而异常不是 。
Go中的错误也是一种类型。错误用内置的error 类型表示。就像其他类型的,如int,float64,。错误值可以存储在变量中,从函数中返回,等等。
演示错误
示例:
func main() {
f, err := os.Open("/test.txt") // 打开一个不存在的文件
if err != nil {
fmt.Println(err)
return
}
//根据f进行文件的读或写
fmt.Println(f.Name(), "opened successfully")
运行结果:
open /test.txt: No such file or directory
以上就会得到一个错误:该文件不存在。
从错误中提取更多信息的不同方法, 既然我们知道错误是一种接口类型,那么让我们看看如何提取更多关于错误的信息。
错误类型表示
Go 语言通过内置的错误接口提供了非常简单的错误处理机制。
错误定义:
type error interface {
Error() string
}
它包含一个带有Error()字符串的方法。任何实现这个接口的类型都可以作为一个错误使用。这个方法提供了对错误的描述。
自定义错误
创建自定义错误可以使用errors包下的New()函数,以及fmt包下的:Errorf()函数。
//errors包:
func New(text string) error {}
//fmt包:
func Errorf(format string, a ...interface{}) error {}
使用New()函数创建自定义错误之前,让我们了解它是如何实现的。
// Package errors implements functions to manipulate errors.
package errors
// New returns an error that formats as the given text.
func New(text string) error {
return &errorString{text}
}
// errorString is a trivial implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
异常处理的正确姿势
- 在程序开发阶段,坚持速错
- 在程序部署后,应恢复异常避免程序终止
- 对于不应该出现的分支,使用异常处理
- 针对入参不应该有问题的函数,使用panic设计
在掘金(juejin.cn) 一起分享知识,Keep Learning!
本文正在参加技术专题18期-聊聊Go语言框架