七叶笔记 » golang编程 » golang fmt 模块

golang fmt 模块

fmt 实现了 printf 和 Scanf 的格式化 IO, 类似 c 语言。格式化 verb 来源于 c,但比 C 更简单。

printing 功能

verb

通用

%v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名

%#v 值的Go语法表示

%T 值的类型的Go语法表示

%% 百分号

布尔值

%t 单词true或false

整数

%b 表示为 二进制

%c 该值对应的 Unicode 码值

%d 表示为十进制

%o 表示为八进制

%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示

%x 表示为十六进制,使用a-f

%X 表示为十六进制,使用A-F

%U 表示为Unicode格式:U+1234,等价于”U+%04X”

浮点数 、复数 的两个组分:

%b 无小数部分、二进制指数的科学计数法,如-123456p-78;参见strconv.FormatFloat

%e 科学计数法,如-1234.456e+78

%E 科学计数法,如-1234.456E+78

%f 有小数部分但无指数部分,如123.456

%F 等价于%f

%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)

%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)

字符串 和[] byte

%s 直接输出字符串或者[]byte

%q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示

%x 每个字节用两字符十六进制数表示(使用a-f)

%X 每个字节用两字符十六进制数表示(使用A-F)

指针

%p 表示为十六进制,并加上前导的0x

各种类型的 %v 默认的格式

bool: %t

int, int8 etc.: %d

uint, uint8 etc.: %d, %#x if printed with %#v

float32, complex64, etc: %g

string: %s

chan: %p

pointer: %p

对于合成对象,用以下规则打印元素

struct: {field0 field1 …}

array, slice: [elem0 elem1 …]

maps: map[key1:value1 key2:value2]

pointer to above: &{}, &[], &map[]

浮点精度 类似 c 语言

%f 默认宽度,默认精度

%9f 宽度9,默认精度

%.2f 默认宽度, 数度2

%9.2f 宽度9, 精度2

%9.f 宽度9, 精度0

其它 flag

+ 总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义);

– 在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐);

# 切换格式:

八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p);

对%q(%#q),如果strconv.CanBackquote返回真会输出反引号括起来的未转义字符串;

对%U(%#U),如果字符是可打印的,会在输出Unicode格式、空格、单引号括起来的go字面值;

‘ ‘ 对数值,正数前加空格而负数前加负号;

对字符串采用%x或%X时(% x或% X)会给各打印的字节之间加空格;

0 使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面;

scanning 功能

一系列类似的函数可以扫描格式化文本以生成值。

Scan、Scanf和Scanln从标准输入os.Stdin读取文本;Fscan、Fscanf、Fscanln从指定的io.Reader接口读取文本;Sscan、Sscanf、Sscanln从一个参数字符串读取文本。

Scanln、Fscanln、Sscanln会在读取到换行时停止,并要求一次提供一行所有条目;Scanf、Fscanf、Sscanf只有在格式化文本末端有换行时会读取到换行为止;其他函数会将换行视为空白。

Scanf、Fscanf、Sscanf会根据格式字符串解析参数,类似Printf。例如%x会读取一个十六进制的整数,%v会按对应值的默认格式读取。格式规则类似Printf,有如下区别:

%p 未实现

%T 未实现

%e %E %f %F %g %G 效果相同,用于读取浮点数或复数类型

%s %v 用在字符串时会读取空白分隔的一个片段

flag # 和 + 未实现

index

type Stringer

type GoStringer

type State

type Formatter

type ScanState

type Scanner

func Printf(format string, a …interface{}) (n int, err error)

func Fprintf(w io.Writer, format string, a …interface{}) (n int, err error)

func Sprintf(format string, a …interface{}) string

func Print(a …interface{}) (n int, err error)

func Fprint(w io.Writer, a …interface{}) (n int, err error)

func Sprint(a …interface{}) string

func Println(a …interface{}) (n int, err error)

func Fprintln(w io.Writer, a …interface{}) (n int, err error)

func Sprintln(a …interface{}) string

func Errorf(format string, a …interface{}) error

func Scanf(format string, a …interface{}) (n int, err error)

func Fscanf(r io.Reader, format string, a …interface{}) (n int, err error)

func Sscanf(str string, format string, a …interface{}) (n int, err error)

func Scan(a …interface{}) (n int, err error)

func Fscan(r io.Reader, a …interface{}) (n int, err error)

func Sscan(str string, a …interface{}) (n int, err error)

func Scanln(a …interface{}) (n int, err error)

func Fscanln(r io.Reader, a …interface{}) (n int, err error)

func Sscanln(str string, a …interface{}) (n int, err error)

#### [参考文章](

相关文章