每次调试代码都像在茫茫大海中捞针?让你的日志输出不再只是“Hello World”级别的简单输出!
一、初识Go log包:你的第一个日志语句
想象一下,你正在编写一个用户登录系统,当用户登录时,你想记录一下这个事件。使用Go的log包,只需要几行代码:
package main
import "log"
func main() {
user := "小明"
log.Print("用户登录成功")
log.Printf("用户 %s 登录成功", user)
log.Println("用户登录成功,当前时间:", "2023-10-01 12:00:00")
}
运行这段代码,你会看到类似这样的输出:
2025/05/30 04:05:22 用户登录成功
2025/05/30 04:05:22 用户 小明 登录成功
2025/05/30 04:05:22 用户登录成功,当前时间: 2023-10-01 12:00:00
看,日志自动加上了日期和时间!这就是log包的默认行为。
三种输出方法区别:
Print:普通输出,不换行Printf:格式化输出,类似fmt.PrintfPrintln:输出后自动换行
在实际开发中,我建议主要使用Printf和Println,因为它们既能满足格式化需求,又能保证可读性。
二、不仅仅是输出:Fatal和Panic的特殊使命
log包不仅仅能输出信息,还能在关键时刻"挺身而出",这就是Fatal和Panic系列函数。
Fatal系列:当程序无法继续时
想象一下,如果数据库连接失败,你的程序根本无法正常工作,这时候就应该使用Fatal日志:
package main
import "log"
func main() {
log.Println("程序启动...")
// 模拟数据库连接失败
dbConnected := false
if !dbConnected {
log.Fatal("数据库连接失败,程序退出")
// 这行代码不会执行
log.Println("这行不会执行")
}
}
运行结果:
2025/05/30 04:05:23 程序启动...
2025/05/30 04:05:23 数据库连接失败,程序退出
关键点:log.Fatal会先输出日志,然后调用os.Exit(1)立即终止程序。所以Fatal后面的代码不会执行。
Panic系列:紧急情况下的优雅处理
与Fatal不同,Panic系列函数会触发panic,但可以被recover捕获:
package main
import (
"fmt"
"log"
)
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println("捕获到panic:", err)
}

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



