我想创建一个与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]")
}
但是当我传递变量时它会输出奇怪的结果。
我该怎么做?
答案 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")
}