情况:
我正在尝试编写一个简单的fmt.Fprintf
包装器,它接受可变数量的参数。代码如下:
func Die(format string, args ...interface{}) {
str := fmt.Sprintf(format, args)
fmt.Fprintf(os.Stderr, "%v\n", str)
os.Exit(1)
}
问题:
当我用Die("foo")
调用它时,我得到了以下输出(而不是"foo"):
额外接口foo%!(
[]接口{}=[])
接口为什么“foo”后面有"%!(EXTRA []
发布于 2012-09-09 06:12:55
变量函数将参数作为类型的一部分接收。在本例中,您的函数接收一个名为args
的[]interface{}
。当您将该参数传递给fmt.Sprintf
时,您将其作为[]interface{}
类型的单个参数进行传递。您真正想要的是将args
中的每个值作为单独的参数传递(与接收它们的方式相同)。为此,您必须使用...
语法。
str := fmt.Sprintf(format, args...)
Go规范here中也解释了这一点。
https://stackoverflow.com/questions/12334697
复制相似问题