go格式化输入输出

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的指针

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180408G14OZ100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券