fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C,但更简单一些
输出
Print
func Print(a ...interface{}) (n int, err error)
- Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,返回写入的字节数和遇到的任何错误。
Println
func Println(a ...interface{}) (n int, err error)
- Println采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符,返回写入的字节数和遇到的任何错误。
Printf
func Printf(format string, a ...interface{}) (n int, err error)
- Printf根据format参数生成格式化的字符串并写入标准输出,返回写入的字节数和遇到的任何错误。
Fprint
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)
- Fprint系列函数会将内容输出到一个
io.Writer
接口类型的变量w中,我们通常用这个函数往文件中写入内容。
Sprint
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
- Sprint系列函数会把传入的数据生成并返回一个字符串。
Errorf
func Errorf(format string, a ...interface{}) error
- Errorf函数根据format参数生成格式化字符串并返回一个包含该字符串的错误。
格式化占位符
通用
占位符 |
说明 |
例子 |
结果 |
%v |
相应值的默认格式 |
Printf("%v",person) |
{lucy 18} |
%+v |
类似%v,但输出结构体时会添加字段名 |
Printf("%+v",person) |
{name:lucy age:18} |
%#v |
相应值的Go语法表示 |
Printf("#v",person) |
main.Person{name:"lucy", age:18} |
%T |
相应值的类型的Go语法表示 |
Printf("%T",person) |
main.Person |
%% |
字面上的百分号,并非值的占位符 |
Printf("%%") |
% |
布尔
占位符 |
说明 |
例子 |
结果 |
%t |
单词true或false |
Printf("%t",true) |
true |
整数
占位符 |
说明 |
例子 |
结果 |
%b |
二进制表示 |
Printf("%b",5) |
101 |
%c |
该值对应的unicode码值 |
Printf("%c",0x4E2d) |
中 |
%d |
十进制表示 |
Printf("%d",0x12) |
18 |
%02d |
两位整数 |
Printf("%02d",8) |
08 |
%o |
八进制表示 |
Printf("%o",10) |
12 |
%q |
单引号围绕的字符字面值,由Go语法安全的转译 |
Printf("%q",0x4E2d) |
中 |
%x |
十六进制表示,字母形式为小写a-f |
Printf("%x",13) |
d |
%X |
十六进制表示,字母形式为大写A-F |
Printf("%X",13) |
D |
%U |
表示为Unicode格式:U+1234 ,等价于U+%04X |
Printf("%U",0x4E2d) |
U+4E2D |
浮点数和复数
占位符 |
说明 |
例子 |
结果 |
%e |
科学计数法,如-1234.456e+78 |
Printf("%e",10.20) |
1.020000e+01 |
%E |
科学计数法,如-1234.456E+78 |
Printf("%E",10.20) |
1.020000E+01 |
%f |
有小数部分但无指数部分 |
Printf("%.2f", 3.1415926) |
3.14 |
%9f |
宽度9,默认精度 |
Printf("%9f", 88.88) |
88.880000 |
%.2f |
默认宽度,精度2 |
Printf("%.2f", 88.8888) |
88.88 |
%g |
根据实际情况采用%e 或%f 格式(以获得更简洁、准确的输出) |
Printf("%g",10.20) |
10.2 |
%G |
根据实际情况采用%E 或%F 格式(以获得更简洁、准确的输出) |
Printf("%G",10.20) |
10.2+2i |
字符串和字节数组
占位符 |
说明 |
例子 |
结果 |
%s |
输出字符串表示(string类型或[]byte) |
Printf("%s",[]byte("Go语言")) |
Go语言 |
%q |
双引号围绕的字符串,由Go语法安全的转译 |
Printf("%q","Go语言") |
"Go语言" |
%x |
十六进制,小写字母,每字节两个字符 |
Printf("%x","golang") |
676f6c616e67 |
%X |
十六进制,大写字母,每字节两个字符 |
Printf("%X","golang") |
676F6C616E67 |
指针
占位符 |
说明 |
例子 |
结果 |
%p |
十六进制表示,前缀 0x |
Printf("%p",&person) |
0xc0420341c0 |
%#p |
十六进制表示,不带前缀 0x |
Printf("%#p",&person) |
c0420341c0 |
输入
Scan
func Scan(a ...interface{}) (n int, err error)
- Scan 从标准输入扫描文本,读取由空格分隔的值保存到传递给本函数的参数中,换行符视为空白符。
- 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。
package main
import (
"fmt"
)
func main() {
var a string
var b string
//此处必须使用接收参数的变量指针
fmt.Scan(&a, &b)
fmt.Print(a, b)
}
Scanf
func Scanf(format string, a ...interface{})(n int, err error)
- Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
- 本函数返回成功扫描的数据个数和遇到的任何错误。
Scanln
func Scanln(a ...interface{}) (n int, err error)
- Scanln类似于Scan,它遇到换行才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
- 本函数返回成功扫描的数据个数和遇到的任何错误。
文件输入输出
这些函数是针对io.Writer、io.Reader进行输入和输出
输出
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
输入
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
字符串输入输出
这些函数是针对string进行输入和输出
输出
func Sprint(a ...interface{}) string
func Sprintln(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
输入
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)