go 中的 fmt 占位符

TimLiuDream · · 1340 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

# 通用占位符 ## %v 值的默认格式表示 ```go fmt.Printf("%v\n", 100)}//100 ``` ## %+v 类似%v,但输出结构体时会添加字段名 ```go o := struct{ name string }{"tim"} fmt.Printf("%+v\n", o)}} //{name:tim} ``` ## %#v 值的 Go 语法表示 ```go o := struct{ name string }{"tim"} fmt.Printf("%#v\n", o)  } //struct { name string }{name:"tim"} ``` ## %T 打印值的类型 ```go o := struct{ name string }{"tim"} fmt.Printf("%T\n", o)  } //struct { name string } ``` ## %% 百分号 ```go fmt.Printf("100%%\n")  }//100% ``` # 布尔型 true 或 false ```go t := true fmt.Printf("value: %t", t) ``` # 整形 ## %b 表示为二进制 ```go fmt.Printf("%b\n", 65)//1000001 ``` ## %c 该值对应的unicode码值 ```go fmt.Printf("%c\n", 65)//A ``` ## %d 表示为十进制 ```go fmt.Printf("%d\n", 65)//65 ``` ## %o 表示为八进制 ```go fmt.Printf("%o\n", 65)//101 ``` ## %x 表示为十六进制,使用a-f ```go fmt.Printf("%x\n", 65)//41 ``` ## %X 表示为十六进制,使用A-F ```go fmt.Printf("%X\n", 65)//41 ``` ## %U 表示为Unicode格式:U+1234,等价于”U+%04X” ```go fmt.Printf("%U\n", 65) // U+0041 ``` ## %q 该值对应的单引号括起来的go语法字符字面值必要时会采用安全的转义表示 ```go fmt.Printf("%q\n", 65)//'A' ``` # 浮点数与复数 ## %b 无小数部分、二进制指数的科学计数法,如-123456p-78 ```go fmt.Printf("%b\n", 12.34)//6946802425218990p-49 ``` ## %e 科学计数法,如-1234.456e+78 ```go fmt.Printf("%e\n", f)//1.234000e+01 ``` ## %G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出) ```go fmt.Printf("%G\n", f)//12.34 ``` ## %g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出) ```go fmt.Printf("%g\n", f)//12.34 ``` ## %F 等价于%f ```go fmt.Printf("%F\n", 12.34)//12.340000 ``` ## %f 有小数部分但无指数部分,如123.456 ```go fmt.Printf("%f\n", f)//12.340000 ``` ## %E 科学计数法,如-1234.456E+78 ```go fmt.Printf("%E\n", f)//1.234000E+01 ``` # 字符串和[]byte ## %s 直接输出字符串或者[]byte ```go fmt.Printf("%s\n", "tim")//tim ``` ## %q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示 ```go fmt.Printf("%q\n", "tim")//"tim" ``` ## %X 每个字节用两字符十六进制数表示(使用A-F) ```go fmt.Printf("%X\n", "tim")//E5BEAEE5AEA2 ``` ## %x 每个字节用两字符十六进制数表示(使用a-f) ```go fmt.Printf("%x\n", "tim")//e5beaee5aea2 ``` # 指针 ## %p 表示为十六进制,并加上前导的0x ```go t := []int{1} fmt.Printf("value: %p", t) // value: 0x14000190008 ``` # 宽度标识符 ## %f 默认宽度,默认精度 ```go v := 92873.2309837 fmt.Printf("value: %f\n", v) // value: 92873.230984 ``` ## %9f 宽度9,默认精度 ```go fmt.Printf("value: %9f\n", v) // value: 92873.230984 ``` ## %9.f 宽度9,精度0 ```go fmt.Printf("value: %9.f\n", v) // value: 92873 ``` ## %9.2f 宽度9,精度2 ```go fmt.Printf("value: %9.2f\n", v) // value: 92873.23 ``` ## %.2f 默认宽度,精度2 ```go fmt.Printf("value: %.2f\n", v) // value: 92873.23 ``` # 其他flag ## '+' 总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义) ```go v := -92873.2309837 fmt.Printf("value: %+f", v) ``` ## ' ' 对数值,正数前加空格而负数前加负号;对字符串采用%x或%X时(% x或% X)会给各打印的字节之间加空格 ```go v := 92873.2309837 fmt.Printf("value: % f", v) ``` ## '0' 使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面 ```go v := -92873.2309837 fmt.Printf("value: %07.f", v) // value: -092873 ``` ## '#' 八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p)对%q(%#q),对%U(%#U)会输出空格和单引号括起来的go字面值 ```go v := 101 fmt.Printf("value: %#o", v) // value: 0145 ``` ## '-' 在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐) ```go v := 101.35345345 fmt.Printf("value: %-3.1f", v) // value: 101.4 ``` # 最后 如果文章可以给你带来一丝收获,请举起你的手指,给我来个一键三连吧! ![扫码_搜索联合传播样式-标准色版.png](https://pic1.58cdn.com.cn/nowater/webim/big/n_v2a3ebf65885c84a1aac037cf9109b9e87.bmp)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1340 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传