在 Go 语言的标准库中,log 包提供了几种不同的日志记录函数,用于记录不同级别的日志信息。log.Panic 和 log.Fatal 都是用于记录错误信息并停止程序执行的函数,但它们之间有一些细微的区别。
1. log.Panic
log.Panic函数会记录一条错误信息,然后调用panic函数。- 当
log.Panic被调用时,程序会立即停止执行,并开始执行所有在当前 goroutine 中被defer的函数。 - 然后程序会打印错误信息,并调用
panic,导致程序崩溃。 log.Panic通常用于在遇到无法恢复的错误时停止程序执行。
示例代码如下
1 | package main |
执行go run指令在终端打印内容如下
1 | 2024/09/09 11:08:15 Panicln |
2. log.Fatal:
log.Fatal函数会记录一条错误信息,然后调用os.Exit(1)。- 当
log.Fatal被调用时,程序会立即停止执行。 - 然后程序会打印错误信息,并调用
os.Exit(1),导致程序以非零状态码退出。 log.Fatal通常用于在遇到无法恢复的错误时停止程序执行,但不会导致程序崩溃。
示例代码如下
1 | package main |
执行go run指令在终端打印内容如下
1 | 2024/09/09 11:11:20 Fatal |
差异示范
如果我们对Panic进行处理的话,代码仍然能执行下去
示例代码修改为如下内容
1 | package main |
再次执行go run指令,终端打印结果如下
1 | 2024/09/09 11:13:16 Panicln |
可以看到panic处理后代码仍然正常执行了
然而我们对log.Fatal进行处理则没有任何作用,因为log.Fatal直接退出了程序
1 | package main |
再次执行go run,终端打印结果如下
1 | 2024/09/09 11:16:43 Fatal |