覆盖printf方法

时间:2016-05-26 19:26:07

标签: go

我想创建一个与fmt.Printf完全相同的函数,但也要用当前时间戳填充字符串。理想情况下,我想覆盖printf和println来完成这项工作,但第一个解决方案也没问题。

这就是我所做的:

func output(message string, a ...interface{}) {
    fmt.Printf(getCurrentTime() + " " + message, a)
}

func getCurrentTime() string {
    t := time.Now()
    return t.Format("[2006-01-02 15:04:05]")
}

但是当我传递变量时它会输出奇怪的结果。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

如果要将可变参元素从函数传递到另一个函数,则必须展开它们。在您的示例中,a[]interface,因此您只将两个参数传递给实际的fmt.Printf:消息和数组。

您必须更正通话:

fmt.Printf(getCurrentTime() + " " + message, a...)

显示发生情况的一个小例子:

func exec(args ...interface{}) {
    fmt.Println(args)
}

func insert(args ...interface{}) {
    exec(args)      // Prints [[5 42]]
    exec(args...)   // Prints [5 42]
}

func main() {
    insert(5, "42")
}