本文最初发表在我的个人博客,查看原文,获得更好的阅读体验
Go中的格式化打印使用类似C的printf
系列的风格,但功能更为丰富和通用。这些函数位于fmt
包中,并具有大写名称:fmt.Printf
,fmt.Fprintf
,fmt.Sprintf
等等。字符串函数(Sprintf
等)返回一个字符串,而不是填充提供的缓冲区。
fmt
包中打印函数如下:
func Fprint(w io.Writer, a ...interface{
}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{
}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{
}) (n int, err error)
func Print(a ...interface{
}) (n int, err error)
func Printf(format string, a ...interface{
}) (n int, err error)
func Println(a ...interface{
}) (n int, err error)
func Sprint(a ...interface{
}) string
func Sprintf(format string, a ...interface{
}) string
func Sprintln(a ...interface{
}) string
一 格式字符串中的占位符
对于以f结尾的格式化打印函数Fprintf
,Printf
,Sprintf
可以接受一个格式字符串,其中格式字符串中有相应的占位符,不同的占位符格式效果不一样。
1.1 常规格式化
%v 默认格式。当打印结构类型时,带加号的标识(%+v)会添加字段名称
%#v 值的Go语法表示形式
%T 值类型的Go语法表示形式
%% 百分号标识字面量,无需提供值
示例:
package main
import (
"fmt"
)
func main() {
t := &T{
7, -2.35, "abc\tdef"}
fmt.Printf("%v\n", t) // &{7 -2.35 abc def}
fmt.Printf("%+v\n", t) // &{a:7 b:-2.35 c:abc def}
fmt.Printf("%#v\n", t) // &main.T{a:7, b:-2.35, c:"abc\tdef"}
fmt.Printf("%T\n", t) // *main.T
fmt.Printf("20%%\n") // 20%
}
type T struct {
a int
b float64
c string
}
1.2 布尔格式化
%t 输出布尔变量值 true 或 false
1.3 整数格式化
%b 二进制形式
%c 相应的Unicode码点表示的字符
%d 十进制形式
%o 八进制形式
%q 使用Go语法安全转义的单引号字符字面量
%x 十六进制形式,a-f为小写
%X 十六进制形式,A-F为大写
%U Unicode格式: U+1234; 等价于 "U+%04X"
示例:
a := 255
fmt.Printf("%b\n", a) // 11111111
fmt.Printf("%c\n", a) // ÿ
fmt.Printf("%d\n", a) // 255
fmt.Printf("%o\n", a<