Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 重写printf方法_Go - Fatal编程技术网

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[]接口{}=[])
-在字符串之后输出空接口。