在 Go 中将变量参数传递给 Sprintf
在 Go 中,Sprintf 函数期望其变量参数为 []interface{} 类型。在处理其他类型的切片(例如 []string)时,这可能是一个限制。
考虑以下代码,它尝试将字符串切片传递给 Sprintf:
<code class="go">s := []string{"a", "b", "c", "d"} fmt.Printf("%5s %4s %3s\n", s[1], s[2], s[3])</code>
运行此代码将导致以下错误:
cannot use v (type []string) as type []interface {} in argument to fmt.Printf
要解决此错误,必须将切片转换为 []interface{} 类型。这可以手动完成,如下所示:
<code class="go">ss := []string{"a", "b", "c"} is := make([]interface{}, len(ss)) for i, v := range ss { is[i] = v }</code>
或者,可以从一开始就将字符串切片声明为 []interface{}:
<code class="go">is := []interface{}{"a", "b", "c"}</code>
使用切片转换为正确的类型后,Sprintf 现在可用于格式化变量参数:
<code class="go">fmt.Printf("%5s %4s %3s\n", is[1], is[2], is[3])</code>
输出:
b c d
通过将字符串切片转换为 []interface{},可以方便地向 Sprintf 传递多个参数。
以上是如何使用字符串切片将变量参数传递给 Go 中的 Sprintf?的详细内容。更多信息请关注PHP中文网其他相关文章!