Go 重写printf方法
我想创建一个函数,它的工作方式与Go 重写printf方法,go,Go,我想创建一个函数,它的工作方式与fmt.Printf完全相同,但它也会用当前时间戳填充字符串。理想情况下,我希望覆盖printf和println来完成这项工作,但第一个解决方案也可以 这就是我所做的: func output(message string, a ...interface{}) { fmt.Printf(getCurrentTime() + " " + message, a) } func getCurrentTime() string { t := time.N
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
是一个[]接口
,因此您只将两个参数传递给实际的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")
}
如果要将可变元素从一个函数传递到另一个函数,必须展开它们。在您的示例中,
a
是一个[]接口
,因此您只将两个参数传递给实际的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")
}
奇怪的结果是什么?你能显示结果吗?
[2016-05-26 21:35:04]一些消息%!(EXTRA[]接口{}=[])
-在字符串之后输出空接口。奇怪的结果是什么?你能显示结果吗?[2016-05-26 21:35:04]一些消息%!(EXTRA[]接口{}=[])
-在字符串之后输出空接口。