有没有办法使用变量索引进行打印?
fmt.Fprintf("%[1] %[2] %[3] %[4]", a, b, c, d)
我收到有关
的错误string不实现io.Writer
使用fmt.Println
将变量索引打印为文字。
答案 0 :(得分:5)
显式参数索引:
在Printf,Sprintf和Fprintf中,默认行为是每个 格式化动词以格式化在调用中传递的连续参数。 但是,动词前面的符号[n]表示 第n个单索引参数将被格式化。相同 宽度或精度的'*'之前的符号选择参数 索引保持该值。处理括号内的表达式[n]后, 除非另有说明,否则后续动词将使用参数n + 1,n + 2等 定向。
例如,
fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
将产生“22 11”
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
Fprintf根据格式说明符格式化并写入w。它 返回写入的字节数和遇到的任何写错误。
func Printf(format string, a ...interface{}) (n int, err error)
Printf根据格式说明符进行格式化并写入标准格式 输出。它返回写入的字节数和任何写入错误 遇到。
对Fprintf
提供io.Writer
或使用Printf
。另外,将格式“动词”添加到格式说明符中。例如,
package main
import (
"fmt"
"os"
)
func main() {
a, b, c, d := 1, 2, 3, 4
fmt.Fprintf(os.Stdout, "%[1]d %[2]d %[3]d %[4]d\n", a, b, c, d)
fmt.Printf("%[1]d %[2]d %[3]d %[4]d\n", a, b, c, d)
}
输出:
1 2 3 4
1 2 3 4
答案 1 :(得分:1)
fmt.Fprintf有定义:
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
所以你需要提供作家。
对于索引,您可以使用以下格式:"%[2]d %[1]d"