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

我很懒,想传递很多变量给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...)  


翻过高山走不出你
浏览 241回答 1
1回答

月关宝盒

是的,这是可能的,只需将您的切片声明为类型,[]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   db    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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go