dongzichan2886 2015-06-02 06:08
浏览 396
已采纳

如何在Golang中将变量参数传递给Sprintf

I'm lazy, want to pass many variables to Printf function, is it possible? (The sample code is simplified as 3 parameters, I require more than 10 parameters).

I got the following message:

cannot use v (type []string) as type []interface {} in argument to fmt.Printf

s := []string{"a", "b", "c", "d"}  // Result from regexp.FindStringSubmatch()
fmt.Printf("%5s %4s %3s
", s[1], s[2], s[3])  

v := s[1:]
fmt.Printf("%5s %4s %3s
", v...)  
  • 写回答

1条回答 默认 最新

  • duancao2082 2015-06-02 06:15
    关注

    Yes, it is possible, just declare your slice to be of type []interface{} because that's what Printf() expects. Printf() signature:

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

    So this will work:

    s := []interface{}{"a", "b", "c", "d"}
    fmt.Printf("%5s %4s %3s
    ", s[1], s[2], s[3])
    
    v := s[1:]
    fmt.Printf("%5s %4s %3s
    ", v...)
    

    Output (Go Playground):

    b    c   d
    b    c   d
    

    []interface{} and []string are not convertible. See this question+answers for more details:

    Type converting slices of interfaces in go

    If you already have a []string or you use a function which returns a []string, you have to manually convert it to []interface{}, like this:

    ss := []string{"a", "b", "c"}
    is := make([]interface{}, len(ss))
    for i, v := range ss {
        is[i] = v
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵