Go语言日志打印的灵活封装与参数处理
在Go语言开发中,经常需要自定义日志处理,例如调整日志级别或格式。本文将解决一个常见的Go语言日志封装问题:如何正确封装log.Printf函数并使其灵活处理格式化参数。
许多开发者尝试自定义日志输出,例如以下代码:
package main import "log" func main() { debugf("我叫%s,今年%d", "jim", 18) } func debugf(str string, arg ...interface{}) { if true { log.Printf(str+"\n", arg) // 错误的参数传递 } }
运行结果并非预期,因为log.Printf期望的是可变参数...interface{},而代码直接传递了arg切片,而非log.Printf所需的可变参数列表。
立即学习“go语言免费学习笔记(深入)”;
正确的做法是使用...展开运算符将arg切片展开为单独的参数传递给log.Printf:
log.Printf(str+"\n", arg...)
修正后的debugf函数如下:
func Debugf(str string, arg ...interface{}) { if true { log.Printf(str+"\n", arg...) // 正确的参数传递 } }
这样,log.Printf就能正确解析参数,输出预期结果:“我叫jim,今年18”。 arg...将arg切片中的每个元素作为独立参数传递给log.Printf,解决了原始代码中的参数传递错误,实现了对log.Printf的正确封装,并保证了参数的灵活传递。
以上就是Go语言日志打印如何正确封装log.Printf并灵活传递参数?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号