Go 中的 log.Fatal
函数详解
log.Fatal
是 Go 标准库 log
包中的一个函数,用于记录严重错误并终止程序执行。
基本用法
import "log"
func main() {
err := someFunction()
if err != nil {
log.Fatal("发生致命错误:", err)
// 等同于:
// log.Print("发生致命错误:", err)
// os.Exit(1)
}
}
特点
- 自动退出程序 -
log.Fatal
在打印日志后会调用os.Exit(1)
,立即终止程序 - 格式化版本 -
log.Fatalf
提供格式化输出功能 - 前缀继承 - 会使用 log 包设置的任何前缀(如日期时间)
Fatalf 格式化示例
count := -5
if count < 0 {
log.Fatalf("无效的计数: %d (必须是正数)", count)
}
Fatal vs Panic
log.Fatal | panic | |
---|---|---|
目的 | 报告不可恢复的错误 | 表示意外情况 |
退出码 | Exit(1) | Exit(2) |
可恢复性 | 不能恢复 | defer中可recover |
HTTP服务器中的使用示例
func main() {
http.HandleFunc("/", handler)
port := ":8080"
fmt.Printf("启动服务在 %s\n", port)
if err := http.ListenAndServe(port, nil); err != nil {
log.Fatal("服务器启动失败:", err)
}
}
注意事项
- 慎用Fatal - Fatal会导致程序立即退出,可能跳过defer语句和资源清理代码
- HTTP处理器中避免使用 - HTTP请求处理中应该返回错误而不是终止整个服务进程
- 测试中使用t.Fatal替代 - Go测试中使用testing.T的Fatal方法而非log.Fatal
内容由零声教学AI助手提供,问题来源于学员提问