我想创建一个函数,它的工作方式与 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]")
}
但是当我传递变量时它会输出奇怪的结果。
我应该怎么做?
最佳答案
如果你想将可变元素从一个函数传递到另一个函数,你必须扩展它们。在您的示例中,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")
}
关于go - 覆盖 printf 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37469440/