有没有办法重用 fmt.Printf 中的参数?

问题描述 投票:0回答:3

我有一种情况,我想使用我的

printf
参数两次。

fmt.Printf("%d %d", i, i)

有没有办法告诉

fmt.Printf
重复使用相同的
i

fmt.Printf("%d %d", i)
go printf
3个回答
96
投票

您可以使用

[n]
表示法来指定显式参数索引,如下所示:

fmt.Printf("%[1]d %[1]d\n", i)

这里是一个完整的示例,您可以尝试一下:http://play.golang.org/p/Sfaai-XgzN


2
投票

另一个选项是文本/模板:

package main

import (
   "strings"
   "text/template"
)

func format(s string, v interface{}) string {
   t, b := new(template.Template), new(strings.Builder)
   template.Must(t.Parse(s)).Execute(b, v)
   return b.String()
}

func main() {
   i := 999
   println(format("{{.}} {{.}}", i))
}

0
投票

通常,包含多个 % 动词的 Printf 格式字符串需要相同数量的额外操作数,但 % 后面的 [n] 个“副词”告诉 Printf 一遍又一遍地使用第 n 个操作数。

package main
import "fmt"
func main() {
    a := 1
    fmt.Printf("%d %[1]T\n", a) //1 int

    b, c := "apple", 3.14
    fmt.Printf("%s %[1]T %g %[2]T", b, c) //apple string 3.14 float64
}
© www.soinside.com 2019 - 2024. All rights reserved.