21. Go-fmt.Printf 格式化输出

  • 一直都搞不清楚 fmt.Printf 格式化输出的 各种参数是什么意思。虽然无关大雅吧,但是存在即合理,这么多人用一定有其独到之处😁。

fmt

  • fmt包实现了类似C语言printfscanf的格式化I/O。格式化动作(‘verb’)源自C语言但更简单。
  • 分类,大概可以按一下几种进行划分。

通用:

  • %v 值的默认格式表示
  • %+v 类似%v,但输出结构体时会添加字段名
  • %#v 值的Go语法表示
  • %T 值的类型的Go语法表示
  • %% 百分号

布尔值:

  • %t 单词truefalse

整数:

  • %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

仍有一些需要注意的地方请点击这里查阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值