【备查】Go 占位符


技术栈转 go 了,经常使用占位符,这篇记录一下常见的占位符。

(下面会使用到自定义结构体 Person,定义放在最前面)

1
2
3
4
5
package main

type Person struct {
Name string
}
占位符 说明 示例 输出
%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(“%%”) %