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 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败