如何在Go中包装FPrintf?

时间:2017-09-14 22:41:44

标签: go printf

我正在尝试编写一个包装FPrintf的功能,但是我一直在搞怪。

这是一个复制者

https://play.golang.org/p/yZgNnpovEa

我的想法是能够有一个条件Printf,我可以测试输出(因此使用FPrintf,所以我可以测试输出的输出)。有没有办法解决这个问题?

我见过How to ignore extra fields for fmt.Sprintf但是所有答案都假设用户只期望%s,而在我的情况下,我想要像Printf一样灵活,而唯一的另一个则是downvoted。

这是不可能的,任何人都可以给出合理的解释原因吗?

1 个答案:

答案 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)
    }
}

请参阅Playground link