Go 错误处理学习笔记
异常与错误的区别
在 Go 语言中,异常和错误是两个不同的概念。
异常是指程序运行时发生的非预期事件,比如除零错误、数组越界等。在 Go 中,没有提供异常的机制,异常不是常规的控制流程,不能被恢复。
错误是指在程序运行过程中出现的意料之外的情况,比如文件不存在、网络故障等。在 Go 中,错误是一种实现了 error
接口的类型,可以通过返回值传递给调用者,并由调用者决定如何处理。
错误处理方式
在 Go 中,通常使用以下两种方式来处理错误:
1. 返回错误
在函数中遇到错误时,通常需要将错误信息返回给调用者。Go 中使用 error
类型来表示错误信息,如果函数正常执行,error 类型的值为 nil,否则为一个非 nil 的值,表示出现了错误。调用者可以根据返回值是否为 nil 来判断函数是否执行成功,如果出现错误,则根据错误信息进行相应的处理。
goCopy Codefunc readFile(filename string) ([]byte, error) {
content, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
return content, nil
}
func main() {
content, err := readFile("testdata/test.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(content))
}
2. Panic 和 Recover
Panic 和 Recover 是 Go 中用于处理异常的机制。当程序发生非预期事件时,可以使用 panic 函数来抛出一个异常,并停止当前的执行流程。然后,在调用 panic 之前,我们可以使用 defer 关键字来注册一些函数,这些函数会在当前 goroutine 发生 panic 时被调用。另外,除了使用 recover 函数来恢复 goroutine 的执行流程外,任何其他的恢复操作都是不允许的。
goCopy Codefunc readFile(filename string) ([]byte, error) {
content, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
return content, nil
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recover from panic:", r)
}
}()
content, _ := readFile("testdata/test.txt")
fmt.Println(string(content))
}
以上就是 Go 错误处理的学习笔记,希望对你有所帮助!