【备查】Go 占位符
技术栈转 go 了,经常使用占位符,这篇记录一下常见的占位符。
(下面会使用到自定义结构体 Person
,定义放在最前面)
1 | package main |
占位符 | 说明 | 示例 | 输出 |
---|---|---|---|
%v | 默认格式 | fmt.Printf(“%v”, Person{“pz”}) | {pz} |
%+v | 加字段名 | fmt.Printf(“%v”, Person{“pz”}) | {Name:pz} |
%#v | 加类型和字段名 | fmt.Printf(“%#v”, Person{“pz”}) | main.Person{Name:”pz”} |
%T | 类型 | fmt.Printf(“%T”, Person{“pz”}) | main.Person |
%s | 字符串 | fmt.Printf(“%s”, “张三\t李四”) | 张三 李四 |
%q | 字符串(带引号、纯字面) | fmt.Printf(“%q”, “张三\t李四”) | “张三\t李四” |
%+q | 字符串(带引号、纯字面, 只含 ASCII 码字符) |
fmt.Printf(“%+q”, “1234 张三”) | “1234 \u5f20\u4e09” |
%b | 二进制 | fmt.Printf(“%b”, 9) | 1001 |
%o | 八进制 | fmt.Printf(“%o”, 9) | 11 |
%d | 十进制 | fmt.Printf(“%d”, 0xe) | 14 |
%x | 十六进制(字母小写) | fmt.Printf(“%x”, 14) | e |
%X | 十六进制(字母大写) | fmt.Printf(“%X”, 14) | E |
%#o | 八进制(含前缀 0) | fmt.Printf(“%#o”, 100) | 0144 |
%#x | 十六进制(含前缀 0x) | fmt.Printf(“%#x”, 100) | 0x64 |
(一些特殊用法) | fmt.Printf(“%32b”, 100) fmt.Printf(“%032b”, 100) fmt.Printf(“%05.2f”, 1.2) fmt.Printf(“|%5.2f|%5.2f|”, 1.2, 3.45) fmt.Printf(“|%-5.2f|%-5.2f|”, 1.2, 3.45) |
1100100 00000000000000000000000001100100 01.20 | 1.20| 3.45| |1.20 |3.45 | |
|
%e | 科学计数法(小写 e) | fmt.Printf(“%e”, 1.1) | 1.100000e+00 |
%E | 科学计数法(大写 E) | fmt.Printf(“%E”, 1.1) | 1.100000E+00 |
%f | 小数 | fmt.Printf(“%f”, 1.1) | 1.100000 |
%g | %e 或 %f(无末尾 0) 哪个紧凑用哪个 |
fmt.Printf(“%g”, 0.1) fmt.Printf(“%g”, 0.00000001) |
0.1 1e-08 |
%G | %E 或 %f(无末尾 0) 哪个紧凑用哪个 |
fmt.Printf(“%G”, 0.1) fmt.Printf(“%G”, 0.00000001) |
0.1 1E-08 |
%+? | (以上都适用)总打印正负号 | fmt.Printf(“%+e”, 1.1) | +1.100000e+00 |
%c | Unicode 表示的字符 | fmt.Printf(“%c”, 0x8A79) | 詹 |
%U | Unicode 编码 | fmt.Printf(“%U”, ‘詹’) | U+8A79 |
%#U | Unicode 编码 + 字符 | fmt.Printf(“%U”, ‘詹’) | U+8A79 ‘詹’ |
%t | 布尔值(true/false) | fmt.Printf(“%t”, true) | true |
%p | 指针 | fmt.Printf(“%p”, &Person{“pz”}) | 0xc00011a050 |
%#p | 指针(去掉前缀 0x) | fmt.Printf(“%p”, &Person{“pz”}) | c00011a050 |
%% | %(字面) | fmt.Printf(“%%”) | % |