这里简单介绍下fmt中格式化的标识,其实go doc fmt开头部分已经有详细的介绍,这里整理以下供自己快速复习查阅.
前提给部分变量,本来不打算附代码的,结果发现还是很多的,所以,示例在这里~
|
|
%v :默认格式输出,打印struct 时%+v 会包含字段名称一起打印:
fmt.Printf("%v", p) //{gkond}
fmt.Printf("%+v", p) //{name:gkond}
至于上面说的默认值就是下面这样的
%#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
还有就是复合类型的展示形式:
浮点数指定精度的表示,长度限制,小数点后面的指的是小数占几位,精度可以丢失但是整数部分不会变少:
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