go中格式化输入输出接口主要包含在fmt包中(实现了类似C语言printf和scanf的格式化I/O),当然也可通过os包中的file读写stdin与stdout,同时可通过bufio来进行有缓冲的读写。
格式化输入scanning:
Scan、Scanf和Scanln从标准输入os.Stdin读取文本;
Fscan、Fscanf、Fscanln从指定的io.Reader接口读取文本;
Sscan、Sscanf、Sscanln从一个参数字符串读取文本
Scanln、Fscanln、Sscanln会在读取到换行时停止,并要求一次提供一行所有条目;
Scanf、Fscanf、Sscanf只有在格式化文本末端有换行时会读取到换行为止;
Scanf、Fscanf、Sscanf会根据格式字符串解析参数,类似Printf;
var(
firstName, lastName string
n int
f float32
input = "12.34, 5678"
)
#以下两种读取方式等价
fmt.Scanln(&firstName, &lastName)
fmt.Scanf(“%s %s”, &firstName, &lastName)
fmt.Sscanf(input, "%f, %d", &f, &n)
#缓冲读取,instr读取直到行尾('\n')
inputReader := bufio.NewReader(os.Stdin)
instr, err := inputReader.ReadString('\n')
格式化输出printing:
Printf、Sprintf、Fprintf:对每一个格式化verb依次对应调用时成功传递进来的参数。但是,紧跟在verb之前的[n]符号表示应格式化第n个参数(索引从1开始)。同样的在'*'之前的[n]符号表示采用第n个参数的值作为宽度或精度。在处理完方括号表达式[n]后,除非另有指示,会接着处理参数n+1,n+2……。
格式化操作符verb:
重复使用操作数
fmt.Printf("%-5d,%5[1]d", 2); // 2 , 2
通用
%v 以默认的方式打印变量的值
%T 打印变量的类型
数字(int)
%+d 带符号的整型,fmt.Printf("%+d", 255)输出+255
%q 打印单引号
%o 不带零的八进制
%#o 带零的八进制
%x 小写的十六进制
%X 大写的十六进制
%#x 带0x的十六进制
%U 打印Unicode字符
%#U 打印带字符的Unicode
%b 打印整型的二进制
浮点数
%f (=%.6f) 6位小数点
%e (=%.6e) 6位小数点(科学计数法)
%g 用最少的数字来表示
%.3g 最多3位数字来表示
%.3f 最多3位小数来表示
字符串
%s 正常输出字符串
%q 字符串带双引号,字符串中的引号带转义符
%#q 字符串带反引号,如果字符串内有反引号,就用双引号代替
%x 将字符串转换为小写的16进制格式
%X 将字符串转换为大写的16进制格式
% x 带空格的16进制格式
字符串宽度
%5s 最小宽度为5
%-5s 最小宽度为5(左对齐)
%.5s 最大宽度为5
%5.7s 最小宽度为5(不足补空格),最大宽度为7(超出部分截去)
%-5.7s 最小宽度为5,最大宽度为7(左对齐)
%5.3s 如果宽度大于3,则截断
%05s 如果宽度小于5,就会在字符串前面补零
结构体
%v 正常打印。比如:}
%+v 带字段名称。比如:
%#v 用Go的语法打印。比如main.People}
布尔类型
%t 打印true或false
指针
%p 带0x的指针
%#p 不带0x的指针
领取专属 10元无门槛券
私享最新 技术干货