我正在尝试编写一个包装FPrintf的功能,但是我一直在搞怪。
这是一个复制者
https://play.golang.org/p/yZgNnpovEa
我的想法是能够有一个条件Printf,我可以测试输出(因此使用FPrintf,所以我可以测试输出的输出)。有没有办法解决这个问题?
我见过How to ignore extra fields for fmt.Sprintf但是所有答案都假设用户只期望%s,而在我的情况下,我想要像Printf一样灵活,而唯一的另一个则是downvoted。
这是不可能的,任何人都可以给出合理的解释原因吗?
答案 0 :(得分:0)
问题是你实际上是向fmt.Fprintf
发送一个空切片。
额外检查参数的长度应该可以解决问题。
func (p ConditionalPrinter) printF(s string, params ...interface{}) {
if p.print {
if len(params) == 0 {
fmt.Fprintf(p.writer, s)
} else {
fmt.Fprintf(p.writer, s, params)
}
}
}
或者这个:
func (p ConditionalPrinter) printF(s string, params ...interface{}) {
switch {
case !p.print:
return
case len(params) == 0:
fmt.Fprintf(p.writer, s)
default:
fmt.Fprintf(p.writer, s, params)
}
}