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 格式化动词用法详解,看这一篇就够了!》
1
sunls 86 天前
这段 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`。 还有这种用法,学到了! |
3
wWjd5V5L0636B5YV 86 天前
茴香?
|
4
bv 86 天前 3
这种索引取值的写法本来是参数复用的,例如:
``` fmt.Printf("%[1]s 和 %[1]s 的朋友们", "Tom") ``` 但是 OP 举的例子不是很恰当:通过打乱顺序来说明用法,即没有把本质原因表现出来,也容易误导读者倾向于炫技。 |
5
ExplodingFKL 86 天前
文章不错,但帖子搞个这样的标题一眼引流让人没有点进来的欲望 ....
|
7
ninjashixuan 85 天前
还真没怎么关注过 fmt 新奇用法,稍微复杂一点都是自己用 strings.Builder 拼接。
|
8
ashin OP @bv 感谢,已接受建议修改原文示例:
```go package main import ( "fmt" ) func main() { // 使用索引进行参数复用 fmt.Printf("%[1]s 和 %[1]s 的朋友\n", "Tom") // 输出 "Tom 和 Tom 的朋友" fmt.Printf("%[2]d 是大于 %[1]d 的数字\n", 11, 22) // 输出 "22 是大于 11 的数字" // 展示使用 [n] 后,后面的动词自动递增 fmt.Printf("%d, %[3]d, %[1]d, %d, %d, %[1]d, %d\n", 100, 200, 300) // 输出 "100, 300, 100, 200, 300, 100, 200" } ``` 这个示例展示了索引取值的几种用法: - 使用 `[n]` 语法来复用同一个参数。 - 控制参数的选择和格式化方式。 - 在格式化字符串中,使用 `[n]` 语法后,后续的动词会自动递增,除非你再次指定索引。 |
9
ryalu 85 天前
满满的干货,整理的很用心,谢谢分享
|