2016-05-26 216 views
0

我想创建一个功能,其功能与fmt.Printf完全一样,但也留下字符串与当前时间戳。理想情况下,我想重写printf和println来完成这项工作,但第一个解决方案也可以。覆盖printf方法

这是我做了什么:

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]") 
} 

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

我该怎么做?

+0

有什么奇怪的结果?你能显示结果吗? –

+0

'[2016-05-26 21:35:04]一些消息%!(EXTRA [] interface {} = [])' - 空接口在字符串后输出。 – user99999

回答

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") 
}