普通打印
Fprint
接受一个输出流和多个写入值。
拼接字符串并打印,如果前后两个操作值全都不是 string 类型的时候,自动添加空格分割。
函数返回打印的字节数数量和错误信息。
s := ""
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, 1, 2, 3, "一共三个值\n")
fmt.Print(buf)
---------------------------
1 2 3一共三个值
Print
和 Fprint 功能一致,只是默认使用了控制台(os.Stdout)输出。
函数返回打印的字节数数量和错误信息。
fmt.Print("First", "Second", "\n")
----------------------------
FirstSecond
Sprint
使用默认格式拼接字符串,并返回一个新的字符串,如果前后两个操作值全都不是 string 类型的时候,自动添加空格分割。
函数返回新的字符串。
newStr := fmt.Sprint("First", "Second", "\n")
fmt.Print(newStr)
---------------------------
FirstSecond
Append
接收一个字节切片以及多个字符串,并将字符串中的字符添加到切片中。
函数返回一个字节切片。
byteList := []byte{'h', 'e', 'a', 'd', 'e', 'r', ' '}
new_bytes := fmt.Append(byteList, "First", "Second", "\n")
fmt.Print(string(new_bytes))
---------------------------
header FirstSecond
自带换行
Fprintln
接受一个输出流和多个写入值。拼接字符串并打印,操作值之间自动添加空格分割,结束后自动添加换行符
函数返回打印的字节数数量和错误信息。
fmt.Fprintln(os.Stdout, "First", "Second")
-------------------
First Second
Println
和 Fprintln 功能一样,默认使用控制台输出
函数返回打印的字节数数量和错误信息。
Sprintln
使用默认格式拼接字符串,并返回一个新的字符串,操作值之间自动添加空格分割,结束后自动添加换行符。
函数返回新的字符串。
Appendln
接收一个字节切片以及多个操作值,并将操作值中的字符添加到切片中,在添加下一个操作值的字符之前会先添加一个空格,结束后自动添加换行符。
函数返回一个字节切片。
格式化打印
也是比较常用的打印方法,将操作值按照占位符代表的格式进行转换并替换。
Fprintf
根据占位符转换并通过指定输出流输出
fmt.Fprintf(os.Stdout, "string:%s,number:%d", "test", 14)
---------------------
string:test,number:14
Printf
和 Fprintf 功能一样,默认使用控制台输出
Sprintf
根据占位符转换并将结果值返回
Appendf
接收一个字节切片、一个带有占位符的字符串、若干操作值,将操作值按照占位符格式转换后,将其字符添加到切片中。
byteList := []byte{'h', 'e', 'a', 'd', 'e', 'r', ' '}
new_bytes := fmt.Appendf(byteList, "number:%d,string:%s", 1, "test")
fmt.Println(string(new_bytes))
------------------------
header number:1,string:test
占位符
普通占位符
占位符 | 作用 |
---|---|
%v | 使用默认格式显示 |
%+v | 可以显示结构体字段名 |
%#v | 可以显示结构体信息和字段名 |
%T | 显示类型 |
test := Test{"ttt"}
fmt.Printf("value: %v\n", "First")
fmt.Printf("value: %v\n", 200)
fmt.Printf("value: %+v\n", test)
fmt.Printf("value: %#v\n", test)
fmt.Printf("type:%T", "First")
----------------------------
value: First
value: 200
value: {name:ttt}
value: main.Test{name:"ttt"}
type:string
字符串占位符
占位符 | 作用 |
---|---|
%s | 替换字符串 |
%10s,%-10s | 设置宽度为10(右对齐,左对齐) |
%010s | 设置宽度为10,右对齐,左侧补零 |
%10.2s,%-10.2s | 设置宽度为10,并截取两位字符(右对齐,左对齐) |
%q | 自动加双引号 |
fmt.Printf("str1: %s\n", "First")
fmt.Printf("str1: %10s\n", "First")
fmt.Printf("str1: %-10s\n", "First")
fmt.Printf("str1: %010s\n", "First")
fmt.Printf("str1: %10.2s\n", "First")
fmt.Printf("str1: %-10.2s\n", "First")
fmt.Printf("str1: %q\n", "First")
-------------------------
str1: First
str1: First
str1: First
str1: 00000First
str1: Fi
str1:Fi
str1: "First"
整数占位符
占位符 | 作用 |
---|---|
%b | 显示二进制 |
%o | 显示八进制 |
%d | 显示十进制 |
%x,%#x | 显示十六进制(小写),显示十六进制(小写且显示前缀) |
%X,%#X | 显示十六进制(大写),显示十六进制(大写且显示前缀) |
%U,%#U | 显示Unicode,显示Unicode并在后面显示被单引号包裹的字符 |
%c | 显示Unicode键码 |
fmt.Printf("BINARY: %b\n", 200)
fmt.Printf("OCTAL: %o\n", 200)
fmt.Printf("DECIMAL: %d\n", 200)
fmt.Printf("HEX(lowercase): %x\n", 200)
fmt.Printf("HEX(lowercase): %#x\n", 200)
fmt.Printf("HEX(uppercase): %X\n", 200)
fmt.Printf("HEX(uppercase): %#X\n", 200)
fmt.Printf("UNICODE: %U\n", 100)
fmt.Printf("UNICODE: %#U\n", 100)
fmt.Printf("KEY CODE: %c\n", 0x0064)
---------------------
BINARY: 11001000
OCTAL: 310
DECIMAL: 200
HEX(lowercase): c8
HEX(lowercase): 0xc8
HEX(uppercase): C8
HEX(uppercase): 0XC8
UNICODE: U+0064
UNICODE: U+0064 'd'
KEY CODE: d
浮点数占位符
占位符 | 作用 |
---|---|
%e,%.5e | 使用科学计数法,后者小数点后保留5位 |
%E,%.5E | 使用科学计数法,后者小数点后保留5位 |
%f,%.2f | 显示浮点数默认保留小数点后了6位,后者保留两位 |
%g,%.5g | 以%f,%e中较短的输出宽度自动适配,后者保留5位有效值(小数点后末尾的0不显示) |
%G,%.5G | 以%f,%E中较短的输出宽度自动适配,后者保留5位有效值(小数点后末尾的0不显示) |
fmt.Printf("科学计数e: %e\n", 2123000000.123456)
fmt.Printf("科学计数e,小数点后保留5位: %.5e\n", 2123000000.123456)
fmt.Printf("科学计数E: %E\n", 2123000000.123456)
fmt.Printf("科学计数E,小数点后保留5位: %.5E\n", 2123000000.123456)
fmt.Printf("浮点数: %f\n", 2123000000.12345678)
fmt.Printf("小数点后保留两位: %.2f\n", 2000000000.123456)
fmt.Printf("自动适配: %g\n", 200.123456)
fmt.Printf("自动适配,保留有效值: %.5g\n", 200.123456)
fmt.Printf("自动适配,保留有效值: %.5g\n", 200.103456)
fmt.Printf("自动适配,保留有效值: %.5g\n", 2123000000.123456)
fmt.Printf("自动适配,保留有效值: %.5G\n", 2123000000.123456)
-----------------------------
科学计数e: 2.123000e+09
科学计数e,小数点后保留5位: 2.12300e+09
科学计数E: 2.123000E+09
科学计数E,小数点后保留5位: 2.12300E+09
浮点数: 2123000000.123457
小数点后保留两位: 2000000000.12
自动适配: 200.123456
自动适配,保留有效值: 200.12
自动适配,保留有效值: 200.1
自动适配,保留有效值: 2.123e+09
自动适配,保留有效值: 2.123E+09
其他占位符
占位符 | 作用 |
---|---|
%p,%#p | 指针占位符,后者不显示前缀 |
%t | 布尔占位符 |
test := Test{"ttt"}
fmt.Printf("POINTER: %p\n", &test)
fmt.Printf("POINTER: %#p\n", &test)
fmt.Printf("RESULT: %t\n", true)
fmt.Printf("RESULT: %t\n", false)
----------------------
POINTER: 0xc000062250
POINTER: c000062250
RESULT: true
RESULT: false