为了账号安全,请及时绑定邮箱和手机立即绑定

golang中如何将可变参数传递给Sprintf

golang中如何将可变参数传递给Sprintf

Go
翻过高山走不出你 2021-10-11 10:48:34
我很懒,想传递很多变量给Printf函数,这可能吗?(示例代码简化为3个参数,我需要10多个参数)。我收到以下消息:不能在 fmt.Printf 的参数中使用 v (type []string) 作为 type []interface {}s := []string{"a", "b", "c", "d"}  // Result from regexp.FindStringSubmatch()fmt.Printf("%5s %4s %3s\n", s[1], s[2], s[3])  v := s[1:]fmt.Printf("%5s %4s %3s\n", v...)  
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

是的,这是可能的,只需将您的切片声明为类型,[]interface{}因为这是Printf()预期的。Printf()签名:


func Printf(format string, a ...interface{}) (n int, err error)

所以这将起作用:


s := []interface{}{"a", "b", "c", "d"}

fmt.Printf("%5s %4s %3s\n", s[1], s[2], s[3])


v := s[1:]

fmt.Printf("%5s %4s %3s\n", v...)

输出(去游乐场):


b    c   d

b    c   d

[]interface{}并且[]string不可转换。有关更多详细信息,请参阅此问题+答案:


在 go 中类型转换接口切片


如果您已经有 a[]string或者您使用了返回 a 的函数[]string,则必须手动将其转换为[]interface{},如下所示:


ss := []string{"a", "b", "c"}

is := make([]interface{}, len(ss))

for i, v := range ss {

    is[i] = v

}


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信