fmt格式简介

这里简单介绍下fmt中格式化的标识,其实go doc fmt开头部分已经有详细的介绍,这里整理以下供自己快速复习查阅.
前提给部分变量,本来不打算附代码的,结果发现还是很多的,所以,示例在这里~

1
2
3
4
5
6
7
type person struct{
name string
}
p := person{name:"gkond"}
s := "gkond"
d :=13

%v :默认格式输出,打印struct 时%+v 会包含字段名称一起打印:

fmt.Printf("%v", p) //{gkond}
fmt.Printf("%+v", p) //{name:gkond}

至于上面说的默认值就是下面这样的

1
2
3
4
5
6
7
bool: %t
int, int8 etc.: %d
uint, uint8 etc.: %d, %#x if printed with %#v
float32, complex64, etc: %g
string: %s
chan: %p
pointer: %p

%#v:go语法输出指明类型以及值:
fmt.Printf("%#v", p) //main.person{name:"gkond"}

%T :类型打印:
fmt.Printf("%T", p) //main.person

%% :这是对%的转义输出百分号

%t :对于bool值:输出true 或者false:
fmt.Printf("%t\n", false) //false,后面可以是bool表达式

%b 对于int类型的值:数值类型二进制表示;对于浮点数:以二为底的科学计数法表示:
fmt.Printf("%b\n", d) //1101
fmt.Printf("%b\n", 1.13) //5089067578928660p-52(5089067578928660除以2的52次方)

%c :打印int数字对应Unicode编码的值:
fmt.Printf("%c\n", 97) //a

%d :对于int而言十进制打印:
fmt.Printf("%d\n", d) //13

%o :八进制:
fmt.Printf("%o\n", d) //15

%q :integer:单引号包裹的数字对应的字符;String and slice of bytes:双引号包裹的字符串:
fmt.Printf("%q\n", d) //'\r'
fmt.Printf("%q\n", s) //"13"

%x :integer:16进制,其中a-f位用小写的表示;String and slice of bytes :就是将字符对应的编码用16进制表示,每个字节2个字符:
fmt.Printf("%x\n", d) //d
fmt.Printf("%x\n", d) //3133 ,31就是49的16进制表示,对应1

%X :integer:16进制,其中a-f位用大写的表示;String and slice of bytes :就是将字符对应的编码用16进制表示,每个字节2个字符:
fmt.Printf("%X\n", d) //D
fmt.Printf("%X\n", d) //3133 ,31就是49的16进制表示,对应1

%U :对于Integer的参数就是将其用Unicode的编码格式展现:
fmt.Printf("%U\n", d) //U+000D

%e :对于浮点数就是用我们常用的科学计数法表示,e也就是10为底的,好吧,还有就是e是小写的:
fmt.Printf("%e\n", 11.13) //1.113000e+01

%E :对于浮点数就是用我们常用的科学计数法表示,e也就是10为底的,好吧,还有就是e是大写的:
fmt.Printf("%E\n", 11.13) //1.113000E+01

%f/%F :浮点数没有指数的小数形式展示(小数点后面6位%.6f):
fmt.Printf("%f\n", 11.13) //11.130000
fmt.Printf("%F\n", 11.13) //11.130000

%g/%G :最少位数的展示
fmt.Printf("%g\n", 11.13) //11.13
fmt.Printf("%G\n", 11.13) //11.13

%s :就是直接输出string或者slice的值:
fmt.Printf("%s\n", s) //13

%p: 0x开头的16进制表示的指针:
fmt.Printf("%p\n", &s) //0xc04203e1d0

还有就是复合类型的展示形式:

1
2
3
4
struct: {field0 field1 ...}
array, slice: [elem0 elem1 ...]
maps: map[key1:value1 key2:value2]
pointer to above: &{}, &[], &map[]

浮点数指定精度的表示,长度限制,小数点后面的指的是小数占几位,精度可以丢失但是整数部分不会变少:

fmt.Printf("start%9.5fend\n", 1.13) //start 1.13000end
fmt.Printf("start%.1fend\n", 1.13) //start1.1end
fmt.Printf("start%3.fend\n", 1111.13) //start1111end

还有就是一些扩展符号

+:总是打印数值的符号,而字符则是要正常输出:

fmt.Printf("%+d\n", d) //+13
fmt.Printf("%+q\n", s) //"13"

-:其实就是左对齐,在右边补空格嘛:
fmt.Printf("start%-9.5fend\n", 1.13) //start1.13000 end

#:八进制,16进制增加前缀,指针则是去掉前缀,对于字符串slice则是反引号(``)包含,当然前提是可以这样展示的:

‘ ‘: 这里其实是说的空格,仍然指的是填充空格占位

fmt.Printf("start% d\n", d) //start 13
fmt.Printf("% X\n", s) //31 33

0:0代替空格占位,对于数字在符号位后面填充:

fmt.Printf("%09.5f\n", 1.13) //001.13000

客官扫码领红包哟~