【问题标题】:How to wrap FPrintf in Go?如何在 Go 中包装 FPrintf?
【发布时间】:2017-09-18 11:04:48
【问题描述】:

我正在尝试编写一个包装 FPrintf 的函数,但是我不断输出奇怪的字符。

这是一个复制器

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

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

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

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

【问题讨论】:

标签: go printf


【解决方案1】:

问题是您实际上向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

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2013-11-29
    • 2020-03-15
    • 2021-07-01
    • 2019-09-28
    • 2016-05-11
    • 2018-08-02
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多