Go 错误处理学习笔记

异常与错误的区别

在 Go 语言中,异常和错误是两个不同的概念。

异常是指程序运行时发生的非预期事件,比如除零错误、数组越界等。在 Go 中,没有提供异常的机制,异常不是常规的控制流程,不能被恢复。

错误是指在程序运行过程中出现的意料之外的情况,比如文件不存在、网络故障等。在 Go 中,错误是一种实现了 error 接口的类型,可以通过返回值传递给调用者,并由调用者决定如何处理。

错误处理方式

在 Go 中,通常使用以下两种方式来处理错误:

1. 返回错误

在函数中遇到错误时,通常需要将错误信息返回给调用者。Go 中使用 error 类型来表示错误信息,如果函数正常执行,error 类型的值为 nil,否则为一个非 nil 的值,表示出现了错误。调用者可以根据返回值是否为 nil 来判断函数是否执行成功,如果出现错误,则根据错误信息进行相应的处理。

goCopy Code
func 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 Code
func 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 错误处理的学习笔记,希望对你有所帮助!