面试题答案
一键面试异步处理策略
- 思路:
- 使用Go的goroutine和channel实现异步日志记录。当错误发生时,将错误信息发送到一个channel,然后由专门的goroutine从channel中读取错误信息并进行日志记录。这样主业务逻辑不会因为日志记录的I/O操作而阻塞,提高应用程序的并发性能。
- 代码实现思路:
package main
import (
"log"
"sync"
)
func main() {
var wg sync.WaitGroup
errorCh := make(chan string)
// 启动日志记录goroutine
wg.Add(1)
go func() {
defer wg.Done()
for errMsg := range errorCh {
log.Println(errMsg)
}
}()
// 模拟业务逻辑中产生错误
for i := 0; i < 10; i++ {
err := "模拟错误" + string(i)
errorCh <- err
}
close(errorCh)
wg.Wait()
}
日志分级策略
- 思路:
- 定义不同的日志级别,如DEBUG、INFO、WARN、ERROR、FATAL。在应用程序中,根据错误的严重程度来决定是否记录日志。例如,在生产环境中,可以只记录ERROR及以上级别的日志,减少不必要的日志记录开销。
- 代码实现思路:
package main
import (
"log"
)
const (
LevelDebug = iota
LevelInfo
LevelWarn
LevelError
LevelFatal
)
var currentLevel = LevelError
func logWithLevel(level int, format string, v...interface{}) {
if level >= currentLevel {
log.Printf(format, v...)
}
}
func main() {
logWithLevel(LevelDebug, "这是DEBUG级别的日志")
logWithLevel(LevelError, "这是ERROR级别的日志")
}
综合优化思路:可以将异步处理和日志分级策略结合使用,先通过日志分级判断是否需要记录,然后将需要记录的错误信息异步发送到日志记录goroutine进行处理。