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 用matlab写代码
  • ¥30 motoradmin系统的多对多配置
  • ¥15 求组态王串口自定义通信配置方法或代码?
  • ¥15 实验 :UML2.0 结构建模
  • ¥20 用vivado写数字逻辑实验报告撰写,FPGA实验
  • ¥15 为什么shp文件会有这种小方块?
  • ¥15 ecplise在连接数据库时显示加载驱动成功但是数据库连接失败
  • ¥15 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据