Go 语言 Printf 函数和格式化动词详解

Printf() 函数可以使用多种格式化动词对输出进行格式化。下面是可以与所有数据类型一起使用的一些通用格式化动词:

通用格式化动词:

以下动词适用于所有数据类型:

动词 描述
%v 以默认格式打印值
%#v 以 Go 语法格式打印值
%T 打印值的类型
%% 打印百分号

示例:

go 复制代码
package main

import (
  "fmt"
)

func main() {
  var i = 15.5
  var txt = "Hello World!"

  fmt.Printf("%v\n", i)
  fmt.Printf("%#v\n", i)
  fmt.Printf("%v%%\n", i)
  fmt.Printf("%T\n", i)

  fmt.Printf("%v\n", txt)
  fmt.Printf("%#v\n", txt)
  fmt.Printf("%T\n", txt)
}

结果:

bash 复制代码
15.5
15.5
15.5%
float64
Hello World!
"Hello World!"
string

整数格式化动词

以下动词适用于整数数据类型:

动词 描述
%b 二进制
%d 十进制
%+d 带符号的十进制
%o 八进制
%O 八进制(带 0o 前缀)
%x 十六进制(小写)
%X 十六进制(大写)
%#x 带 0x 前缀的十六进制
%4d 使用空格填充(宽度 4,右对齐)
%-4d 使用空格填充(宽度 4,左对齐)
%04d 使用零填充(宽度 4)

示例:

go 复制代码
package main

import (
  "fmt"
)

func main() {
  var i = 15

  fmt.Printf("%b\n", i)
  fmt.Printf("%d\n", i)
  fmt.Printf("%+d\n", i)
  fmt.Printf("%o\n", i)
  fmt.Printf("%O\n", i)
  fmt.Printf("%x\n", i)
  fmt.Printf("%X\n", i)
  fmt.Printf("%#x\n", i)
  fmt.Printf("%4d\n", i)
  fmt.Printf("%-4d\n", i)
  fmt.Printf("%04d\n", i)
}

结果:

bash 复制代码
1111
15
+15
17
0o17
f
F
0xf
  15
15
0015

字符串格式化动词

以下动词适用于字符串数据类型:

动词 描述
%s 普通字符串打印
%q 双引号包裹的字符串打印
%8s 普通字符串打印(宽度 8,右对齐)
%-8s 普通字符串打印(宽度 8,左对齐)
%x 字节值的十六进制转储
% x 带空格的十六进制转储

示例:

go 复制代码
package main

import (
  "fmt"
)

func main() {
  var txt = "Hello"

  fmt.Printf("%s\n", txt)
  fmt.Printf("%q\n", txt)
  fmt.Printf("%8s\n", txt)
  fmt.Printf("%-8s\n", txt)
  fmt.Printf("%x\n", txt)
  fmt.Printf("% x\n", txt)
}

结果:

bash 复制代码
Hello
"Hello"
   Hello
Hello
48656c6c6f
48 65 6c 6c 6f

布尔格式化动词

以下动词适用于布尔数据类型:

动词 描述
%t 布尔运算符的 true 或 false 格式(与 %v 相同)

示例:

go 复制代码
package main

import (
  "fmt"
)

func main() {
  var i = true
  var j = false

  fmt.Printf("%t\n", i)
  fmt.Printf("%t\n", j)
}

结果:

bash 复制代码
true
false

浮点数格式化动词

以下动词适用于浮点数数据类型:

动词 描述
%e 科学计数法,指数为 'e'
%f 小数点,无指数部分
%.2f 默认宽度,精度为 2
%6.2f 宽度 6,精度 2
%g 必要时使用指数,仅保留必要的位数

示例:

go 复制代码
package main

import (
  "fmt"
)

func main() {
  var i = 3.141

  fmt.Printf("%e\n", i)
  fmt.Printf("%f\n", i)
  fmt.Printf("%.2f\n", i)
  fmt.Printf("%6.2f\n", i)
  fmt.Printf("%g\n", i)
}

结果:

bash 复制代码
3.141000e+00
3.141000
3.14
  3.14
3.141

请注意,这个翻译可能不是完美的,因为语言之间的表达方式可能有细微的差异。

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

相关推荐
SelectDB3 小时前
Apache Doris 事务保障实战教程:从三阶段提交到 Flink 精确一次写入
后端
SelectDB3 小时前
Apache Doris 向量化执行实战教程:从 CPU 指令到性能验证的完整实践
后端
神奇小汤圆3 小时前
别再乱排查了!Kafka 消息积压、重复、丢失,根源基本都是 Rebalance!
后端
FellAveal3 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
长不胖的路人甲4 小时前
Serial 串行、Parallel 并行、CMS 并发收集器
java·开发语言·jvm
你怎么知道我是队长4 小时前
经典蓝牙(Bluetooth Classic / BR/EDR)学习计划
学习
神奇小汤圆4 小时前
字节二面:10亿数据毫秒级查手机尾号后4位,答不出“异构索引”直接挂?
后端
极地野狼 音乐哔哔4 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
学习·microsoft
IT_Octopus4 小时前
Spring Boot 线程池关闭:destroyMethod 的作用与最佳实践
java·spring boot·后端
Leslie1654 小时前
用 Reactor 和 Linux 命名管道实现一个本地事件总线
后端