在 Go 语言中,fmt
包提供了丰富的格式化输出函数,其中最常用的是 Printf
。Printf
函数支持多种格式化动词,用于将变量格式化为字符串,并输出到标准输出。下面详细介绍 Printf
函数的用法和常见的格式化动词。
Printf
函数Printf
函数的基本用法如下:
fmt.Printf(format string, a ...interface{}) (n int, err error)
format
:格式化字符串,其中包含格式化动词。a
:一个或多个需要格式化的变量。package main
import "fmt"
func main() {
name := "Alice"
age := 25
fmt.Printf("Name: %s, Age: %d\n", name, age)
}
%v
:按默认格式输出变量的值。%+v
:输出结构体时,包含字段名。%#v
:输出变量的 Go 语法表示。%T
:输出变量的类型。%%
:输出百分号。%t
:输出 true
或 false
。%b
:表示为二进制。%c
:表示为 Unicode 字符。%d
:表示为十进制。%o
:表示为八进制。%O
:表示为带前缀 0o 的八进制。%x
:表示为十六进制,使用小写字母 a-f。%X
:表示为十六进制,使用大写字母 A-F。%U
:表示为 Unicode 格式,带 U+
前缀。%e
:科学计数法,使用小写 e。%E
:科学计数法,使用大写 E。%f
:有小数点而无指数。%F
:同 %f
。%g
:根据实际情况采用 %e
或 %f
格式。%G
:根据实际情况采用 %E
或 %F
格式。%s
:字符串或字节切片表示。%q
:双引号括起来的字符串。%x
:每个字节用两字符十六进制表示。%X
:每个字节用两字符十六进制表示,使用大写字母。%p
:表示为十六进制,并加上前缀 0x
。package main
import "fmt"
func main() {
// 通用动词
fmt.Printf("%v\n", 123) // 123
fmt.Printf("%+v\n", struct{ X, Y int }{1, 2}) // {X:1 Y:2}
fmt.Printf("%#v\n", struct{ X, Y int }{1, 2}) // struct { X int; Y int }{X:1, Y:2}
fmt.Printf("%T\n", 123) // int
fmt.Printf("%%\n") // %
// 布尔值动词
fmt.Printf("%t\n", true) // true
// 整数动词
fmt.Printf("%b\n", 255) // 11111111
fmt.Printf("%c\n", 65) // A
fmt.Printf("%d\n", 255) // 255
fmt.Printf("%o\n", 255) // 377
fmt.Printf("%O\n", 255) // 0o377
fmt.Printf("%x\n", 255) // ff
fmt.Printf("%X\n", 255) // FF
fmt.Printf("%U\n", '世') // U+4E16
// 浮点数和复数动词
fmt.Printf("%e\n", 123.456) // 1.234560e+02
fmt.Printf("%E\n", 123.456) // 1.234560E+02
fmt.Printf("%f\n", 123.456) // 123.456000
fmt.Printf("%F\n", 123.456) // 123.456000
fmt.Printf("%g\n", 123.456) // 123.456
fmt.Printf("%G\n", 123.456) // 123.456
// 字符串和字节切片动词
fmt.Printf("%s\n", "Hello, Go!") // Hello, Go!
fmt.Printf("%q\n", "Hello, Go!") // "Hello, Go!"
fmt.Printf("%x\n", "Hello") // 48656c6c6f
fmt.Printf("%X\n", "Hello") // 48656C6C6F
// 指针动词
fmt.Printf("%p\n", &struct{ X, Y int }{1, 2}) // 0x<address>
}
可以在格式化动词中指定宽度和精度,用于控制输出的对齐和精度。
package main
import "fmt"
func main() {
n := 123.456
// 宽度控制
fmt.Printf("%10.2f\n", n) // 123.46 (宽度为10,小数点后保留2位)
fmt.Printf("%10s\n", "Go") // Go (宽度为10,右对齐)
// 精度控制
fmt.Printf("%.2f\n", n) // 123.46 (小数点后保留2位)
fmt.Printf("%.5s\n", "Hello, Go!") // Hello (字符串截取前5个字符)
// 宽度和精度一起控制
fmt.Printf("%10.5s\n", "Hello, Go!") // Hello (宽度为10,截取前5个字符)
}
Go 语言的 Printf
函数及其格式化动词为格式化输出提供了丰富的功能。通过掌握各种格式化动词及其宽度和精度控制,可以灵活地将变量格式化为所需的字符串形式。
原文链接:codingdict.net