对不起基本问题。我想传递一个切片作为参数 fmt.Sprintf
。像这样的东西:
values := []string{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)
结果就是 foobarbaz
,但这显然不起作用。
(我想格式化的字符串比这更复杂,所以简单的连接不会这样做:)
所以问题是:如果我有数组,我怎么能把它作为单独的参数传递给 fmt.Sprintf
?或者:我可以在Go中调用一个传递参数列表的函数吗?
正如您在IRC上发现的那样,这将起作用:
values := []interface{}{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)
您的原始代码不起作用,因为 fmt.Sprintf
接受一个 []interface{}
和 []string
无法隐式或显式转换为该类型。
正如您在IRC上发现的那样,这将起作用:
values := []interface{}{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)
您的原始代码不起作用,因为 fmt.Sprintf
接受一个 []interface{}
和 []string
无法隐式或显式转换为该类型。
我认为这样做的问题是Sprintf无法使用无限长度切片,所以它不实用。格式参数的数量必须与格式化指令的数量相匹配。您将要么必须将它们提取到局部变量中,要么写一些东西来迭代切片并将字符串连接在一起。我会选择后者。