我发现了一个旧的日志条目
2024/04/13 14:58:58 article.NumOfRequests = %!(EXTRA int=1)
代码执行时输出:
article, err := articlefinder.FindBySeoId(seoId, service.Repos.GetArticles())
article.NumOfRequests += 1
log.Printf("article.NumOfRequests = ", article.NumOfRequests)
return *article, err
这种奇怪的输出格式是什么意思?
您的
Printf
参数比格式化指令还要多。所有“额外”参数都打印为%!(EXTRA type=value)
:这样的调用并不违反语言的规则,因此编译器不会抱怨。如果您想在构建阶段捕获此类错误,请添加对 makefile 的调用
go vet
。该命令会抛出错误同时,尝试替换一个不是说明符所期望类型的值。例如,将数字替换为 的参数
%s
:将被打印
Hello, %!s(int=123)
,输出格式%!<spec>(type=value)
。go vet
它还发现这样的错误:fmt.Printf format %s has arg 123 of wrong type int