golang 中fmt用法

本文详细介绍了Go语言中的fmt包,包括通用占位符、布尔值、整数值、浮点数、字符串、指针的格式化输出,以及宽度、精度、其他标志的使用方法。此外,还提到了错误处理、Scan系列函数的使用,以及自定义格式化输出的接口。通过实例展示了如何在Go程序中使用fmt进行输出和扫描操作。
摘要由CSDN通过智能技术生成

fmt包实现了格式化的I/O函数,这点类似C语言中的printf和scanf,但是更加简单.

 

占位符:

通用占位符:

 

%v	值的默认格式。当打印结构体时,“加号”标记(%+v)会添加字段名
%#v 相应值的Go语法表示
%T	相应值的类型的Go语法表示
%%	字面上的百分号,并非值的占位符 

用法如下:

 

 

[html]  view plain  copy

  1. package main  
  2.   
  3. import (  
  4.     "fmt"  
  5. )  
  6.   
  7. type Sample struct {  
  8.     a   int  
  9.     str string  
  10. }  
  11.   
  12. func main() {  
  13.     s := new(Sample)  
  14.     s.a = 1  
  15.     s.str = "hello"  
  16.     fmt.Printf("%v\n", *s) //{1 hello}  
  17.     fmt.Printf("%+v\n", *s) //  {a:1 str:hello}  
  18.     fmt.Printf("%#v\n", *s) // main.Sample{a:1, str:"hello"}  
  19.     fmt.Printf("%T\n", *s)   //  main.Sample  
  20.     fmt.Printf("%%\n", s.a) //  %  %!(EXTRA int=1)       <span style="color:#FF0000;"> 注:暂时还没有明白其用法</span>  
  21. }   


布尔值:

 

 

%t	 true 或 false

 

整数值:

 

%b	二进制表示
%c	相应Unicode码点所表示的字符
%d	十进制表示
%o	八进制表示
%q	单引号围绕的字符字面值,由Go语法安全地转义
%x	十六进制表示,字母形式为小写 a-f
%X	十六进制表示,字母形式为大写 A-F
%U	Unicode格式:U+1234,等同于 "U+%04X"

 

浮点数及复数:

 

%b	无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat中的 'b' 转换格式一致。例如 -123456p-78
%e	科学计数法,例如 -1234.456e+78
%E	科学计数法,例如 -1234.456E+78
%f	有小数点而无指数,例如 123.456
%g	根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
%G	根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出

字符串和bytes的slice表示:

 

 

%s	字符串或切片的无解译字节
%q	双引号围绕的字符串,由Go语法安全地转义
%x	十六进制,小写字母,每字节两个字符
%X	十六进制,大写字母,每字节两个字符

 

指针:

 

%p	十六进制表示,前缀 0x

这里没有 'u' 标记。若整数为无符号类型,他们就会被打印成无符号的。类似地,这里也不需要指定操作数的大小(int8,int64)。

 

对于%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

由此可以看出,默认的输出格式可以使用%v进行指定,除非输出其他与默认不同的格式,否则都可以使用%v进行替代(但是不推荐使用)

 

对于复合对象,里面的元素使用如下规则进行打印:

 

struct:             {field0 field1 ...}
array, slice:       [elem0  elem1 ...]
maps:               map[key1:value1 key2:value2]
pointer to above:   &{}, &[], &map[]

 

宽度和精度:

宽度是在%之后的值,如果没有指定,则使用该值的默认值,精度是跟在宽度之后的值,如果没有指定,也是使用要打印的值的默认精度.例如:%9.2f,宽度9,精度2

 

%f:    default width, default precision
%9f    width 9, default precision
%.2f   default width, precision 2
%9.2f  width 9, precision 2
%9.f   width 9, precision 0

 

对数值而言,宽度为该数值占用区域的最小宽度;精度为小数点之后的位数。但对于 %g/%G 而言,精度为所有数字的总数。例如,对于123.45,格式 %6.2f会打印123.45,而 %.4g 会打印123.5。%e 和 %f 的默认精度为6;但对于 %g 而言,它的默认精度为确定该值所必须的最小位数。

对大多数值而言,宽度为输出的最小字符数,如果必要的话会为已格式化的形式填充空格。对字符串而言,精度为输出的最大字符数,如果必要的话会直接截断。

宽度是指"必要的最小宽度". 若结果字符串的宽度超过指定宽度时, 指定宽度就会失效。

若将宽度指定为`*'时, 将从参数中取得宽度值。

紧跟在"."后面的数串表示精度(若只有"."的话,则为".0")。若遇到整数的指示符(`d', `i', `b', `o', `x', `X', `u')的话,精度表示数值部分的长度

若遇到浮点数的指示符(`f')的话,它表示小数部分的位数。

若遇到浮点数的指示符(`e', `E', `g', `G')的话,它表示有效位数

若将精度设为`*'的话,将从参数中提取精度的值

其中对于字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值