golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。
支持函数
在 Go 语言中,标准包 fmt 有好多格式化的工具函数,函数名末尾通常以 f 结尾,列举如下:
fmt.Printf
格式化字符串并打印到终端(标准输出)。fmt.Sprintf
格式化字符串并返回。fmt.Sscanf
从字符串中解析占位符的对应位置数据。fmt.Fscanf
从 io.Reader 类型中读取数据并解析占位符的对应位置数据,用于读取文件、终端(标准输入)。fmt.Fprintf
将格式化的字符串数据输出到 io.Writer 类型中,用于输出到文件。fmt.Errorf
格式化方式创建一个错误类型消息。
type Human struct {
Name string
}
var people = Human{Name:"zhangsan"}
占位符类别
// 1. 通用占位符
fmt.Printf("%v,%+v,%#v,%T,%%", people)
// {zhangsan},{Name:zhangsan},main.Human{Name:“zhangsan”},main.Human,%
// 2. 布尔占位符
fmt.Printf("%t", true) // true
// 3. 整数占位符
fmt.Printf("%b", 5) // 101 二进制表示
fmt.Printf("%c,%q,%c", 0x4E2D, 0x4E2D, 0x82d7)
// 中,'中',苗 Unicode 码转字符.%q加单引号
fmt.Printf("%d,%d,%d", 10, 010, 0x10)
// 10,8,16 十进制表示。三个数据: 10 十进制,010 八进制,0x10 十六进制
fmt.Printf("|%5d|%-5d|%05d|", 1, 1, 1)
// | 1|1 |00001| %5d:最小宽度为 5,右对齐,左边留白。%-5d:左对齐,右边留白。
fmt.Printf("%o,%#o,%o,%o", 10, 10, 010, 0x10)
// 12,012,10,20 八进制表示. 很多语言将0打头的数字表示八进制。通过 %#o 输出带 0 开头
fmt.Printf("%x, %#x, %X, %#X", 13, 13, 13, 13)
// d, 0xd, D, 0XD 十六进制表示,%#x 输出带 0x 开头。
fmt.Printf("%U,%#U", 0x82d7)
// U+82D7,U+82D7 '苗' %U:转化为 Unicode 格式规范。%#U:转化为 Unicode 格式并带上对应的字符。
// 4. 浮点型占位符
fmt.Printf("%f|%.2f|%.2f", 10.2, 10.232, 10.235)
// 10.200000|10.23|10.23
// 5. 字符串与字节切片
fmt.Printf("%s|%s|%q|%x|%X", "老苗", []byte("嘿嘿嘿"), "老苗", "苗", "苗")
// 老苗|嘿嘿嘿|"老苗"|e88b97|E88B97
// 6. 指针.
num := 2
s := []int{1, 2}
fmt.Printf("%p|%p|%#p|%#p", &num, s, &num, s)
// 0xc000018070|0xc000018080|c000018070|c000018080 地址. 使用十六进制表示,%p 带 0x,%#p 不带。
// 7. 获取数据类型
fmt.Printf("%T", data)
// main.Example
// 8. 其他标记
fmt.Printf("%+d|%+d|%+q|%+q", 2, -2, "miao","苗")
// +2|-2|"miao"|"\u82d7" 数值打印正负号,对于 %+q,非 ASCII 编码,则转成 Unicode 编码输出。
fmt.Printf("%#q", "苗")
// `苗` 为字符串添加反引号
fmt.Printf("%05s|%+05d", "a", 1)
// 0000a|+0001 填充0. 总长度为5, 不足5则填充0
fmt.Printf("%.2s", "abc")
// ab 字符串截断
整理 Go 语言中 20 个占位符 https://studygolang.com/articles/35270
Golang fmt格式“占位符” https://blog.csdn.net/weixin_45994575/article/details/122824239