您的位置 首页 知识分享

为什么 Go 语言中封装的 log.Printf 方法输出结果不符合预期?

go 语言中封装 log.printf 方法 问题 在 go 语言中,为了控制日志输出,您对 log 包相关的…

为什么 Go 语言中封装的 log.Printf 方法输出结果不符合预期?

go 语言中封装 log.printf 方法

问题

在 go 语言中,为了控制日志输出,您对 log 包相关的方法进行了封装。然而,在使用封装的 log.printf 方法时,输出结果不符合预期。

代码

package main  import "log"  func main() {     debugf("我叫%s,今年%d", "jim", 18) }  func debugf(str string, arg ...interface{}) {     if true {         log.printf(str+" ", arg)     } }
登录后复制

输出结果

2021/12/17 16:35:16 我叫[jim %!s(int=18)],今年%!d(missing)
登录后复制

问题分析

输出结果出现问题的原因是 log.printf 方法的格式字符串和参数列表不匹配。arg 是一个 …interface{} 类型参数列表,而 log.printf 方法期望一个 []interface{} 类型参数列表。

解决方案

要解决这个问题,需要将 arg 参数列表显式转换为 []interface{} 类型,可以使用 … 运算符。

将代码中的

log.printf(str+" ", arg)
登录后复制

修改为:

log.printf(str+" ", arg...)
登录后复制

修改后,输出结果将符合预期:

我叫jim,今年18
登录后复制

以上就是为什么 Go 语言中封装的 log.Printf 方法输出结果不符合预期?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/4422.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部