golang fmt 模块

Go语言的fmt模块提供了类似于C语言的格式化IO功能,包括printf和scanf。它支持多种格式化verb,如%v、%T、%b、%d等,适用于不同数据类型的输出。此外,fmt模块还包含打印和扫描功能,如Printf、Sprintf、Scanf等,方便进行格式化输出和输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

#### [参考文章](https://studygolang.com/articles/595)

**欢迎加入QQ群一块讨论学习 1016108829**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值