- 一直都搞不清楚
fmt.Printf格式化输出的 各种参数是什么意思。虽然无关大雅吧,但是存在即合理,这么多人用一定有其独到之处?。
fmt
fmt包实现了类似C语言printf和scanf的格式化I/O。格式化动作(‘verb’)源自C语言但更简单。- 分类,大概可以按一下几种进行划分。
通用:
%v值的默认格式表示%+v类似%v,但输出结构体时会添加字段名%#v值的Go语法表示%T值的类型的Go语法表示%%百分号
布尔值:
%t单词true或false
整数:
%b表示为二进制%c该值对应的unicode码值%d表示为十进制%o表示为八进制%q该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示%x表示为十六进制,使用a-f%X表示为十六进制,使用A-F%U表示为Unicode格式:U+1234,等价于"U+%04X"
浮点数与复数
%b无小数部分、二进制指数的科学计数法,如-123456p-78%e科学计数法,如-1234.456e+78%E科学计数法,如-1234.456E+78%f有小数部分但无指数部分,如123.456%F等价于%f%g根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)%G根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
字符串和[]byte
%s直接输出字符串或者[]byte%q该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示%x每个字节用两字符十六进制数表示(使用a-f)%X每个字节用两字符十六进制数表示(使用A-F)
指针
%p表示为十六进制,并加上前导的0x
格式化错误
- 如果给某个占位符提供了非法的参数,如给
%d提供了一个字符串,生成的字符串会包含该问题的描述,如下所例:
// 类型错误或占位符未知:%!verb(type=value)
Printf("%d", hi)
// %!d(string=hi)
// 实参太多:%!(EXTRA type=value)
Printf("hi", "guys")
// hi%!(EXTRA string=guys)
// 实参太少:%!verb(MISSING)
Printf("hi%d")
// hi %!d(MISSING)
// 宽度或精度不是 int 类型:%!(BADWIDTH)或 %!(BADPREC)
Printf("%*s", 4.5, "hi")
// %!(BADWIDTH)hi
Printf("%.*s", 4.5, "hi")
// %!(BADPREC)hi
仍有一些需要注意的地方请点击这里查阅
版权声明:本文为mucuni原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。