go 格式化输出,说说你的结果是啥?😁

```go
fmt.Printf("%[2]d %[1]d\n", 11, 22)
fmt.Printf("%[3]*.[2]*[1]f\n", 12.0, 2, 6)
fmt.Printf("%d %d %#[1]x %#x\n", 16, 17)
```

以上是 go 语言格式化输出中的显式参数索引用法。

了解 golang 格式化动词,请阅读全文:[《 Golang 格式化输出完全指南:fmt.Printf 格式化动词用法详解,看这一篇就够了!》]( https://blog.axiaoxin.com/post/golang-fmt-ferbs/)
举报· 65 次点击
登录 注册 站外分享
7 条回复  
sunls 小成 2024-8-30 10:00:44
这段 Go 语言代码的输出解释如下:

1. `fmt.Printf("%[2]d %[1]d\n", 11, 22)`:
   - `%[2]d` 表示输出第 2 个参数 `22`。
   - `%[1]d` 表示输出第 1 个参数 `11`。
   - 输出结果是 `22 11`。

2. `fmt.Printf("%[3]*.[2]*[1]f\n", 12.0, 2, 6)`:
   - `%[3]*.[2]*[1]f` 表示格式化浮点数,其中 `[3]` 是宽度,`[2]` 是小数位数,`[1]` 是浮点数值。
   - 这里 `[3]` 是 `6`,宽度为 6 , `[2]` 是 `2`,小数位数为 2 ,`[1]` 是 `12.0`。
   - 格式化结果是 ` 12.00`,输出时,前面有一个空格以保证总宽度为 6 。

3. `fmt.Printf("%d %d %#[1]x %#x\n", 16, 17)`:
   - `%d` 输出整数 `16`。
   - `%d` 输出整数 `17`。
   - `%#[1]x` 输出第 1 个参数 `16` 的十六进制形式,前面有 `0x`,即 `0x10`。
   - `%#x` 输出最后一个参数 `17` 的十六进制形式,前面有 `0x`,即 `0x11`。
   - 输出结果是 `16 17 0x10 0x11`。


还有这种用法,学到了!
xiaogang530 小成 2024-8-30 10:41:31
茴香?
bv 小成 2024-8-30 10:48:38
这种索引取值的写法本来是参数复用的,例如:

```
fmt.Printf("%[1]s 和 %[1]s 的朋友们", "Tom")
```

但是 OP 举的例子不是很恰当:通过打乱顺序来说明用法,即没有把本质原因表现出来,也容易误导读者倾向于炫技。
ExplodingFKL 小成 2024-8-30 11:06:12
文章不错,但帖子搞个这样的标题一眼引流让人没有点进来的欲望 ....
body007 初学 2024-8-30 11:14:53
@bv 感谢大佬分享该用法,之前我多次用到某个值,就在参数写多次,这下方便多了👍
ninjashixuan 小成 2024-8-30 11:52:55
还真没怎么关注过 fmt 新奇用法,稍微复杂一点都是自己用 strings.Builder  拼接。
ryalu 初学 2024-8-30 13:50:46
满满的干货,整理的很用心,谢谢分享
返回顶部