面试题答案
一键面试- 设置日志输出格式:
- Go语言的
log
包默认输出格式相对简单。如果要自定义格式,可以使用log.SetFlags
函数。log
包提供了以下几种标志位:log.Ldate
:日期:2009/01/23log.Ltime
:时间:01:23:24log.Lmicroseconds
:微秒级时间:01:23:24.123123log.Llongfile
:全路径文件名和行号:/a/b/c/d.go:23log.Lshortfile
:最后一个文件名元素和行号:d.go:23(在Llongfile开启时有效)log.LUTC
:使用UTC时间,否则使用本地时间
- 示例:
- Go语言的
package main
import (
"log"
)
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("This is a log message")
}
- 设置日志输出位置:
- 默认情况下,
log
包输出到标准错误(os.Stderr
)。可以使用log.SetOutput
函数来更改输出位置。例如,将日志输出到文件:
- 默认情况下,
package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("Failed to open log file: %v", err)
}
defer file.Close()
log.SetOutput(file)
log.Println("This log message will be written to app.log")
}
- 在不同阶段添加日志辅助定位问题:
- 函数入口处:记录输入参数,这样可以确保传入函数的数据是预期的。
func calculateSum(a, b int) int {
log.Printf("Entering calculateSum with a = %d and b = %d\n", a, b)
result := a + b
log.Printf("Exiting calculateSum with result = %d\n", result)
return result
}
- 关键计算步骤:在函数执行过程中的关键计算处添加日志,有助于确认中间结果是否正确。
func complexCalculation(x, y int) int {
step1 := x * 2
log.Printf("Step 1: x * 2 = %d\n", step1)
step2 := y + 3
log.Printf("Step 2: y + 3 = %d\n", step2)
result := step1 + step2
log.Printf("Final result of complexCalculation: %d\n", result)
return result
}
- 错误处理处:记录错误信息及相关上下文,方便定位错误来源。
func readFileContent(filePath string) ([]byte, error) {
data, err := os.ReadFile(filePath)
if err != nil {
log.Printf("Error reading file %s: %v", filePath, err)
return nil, err
}
return data, nil
}
通过合理设置日志输出格式、输出位置,并在函数不同阶段添加日志,可以更有效地在Go函数调试场景中定位问题。