2021-08-29 02:34:13

go printf格式化参数

[TOC]

printf的格式化输出示例参考

说明

Printf 格式化输出

  • 通用占位符:
  • v 值的默认格式。
  • %+v 添加字段名(如结构体)
  • %#v  相应值的Go语法表示
  • %T 相应值的类型的Go语法表示
  • %% 字面上的百分号,并非值的占位符 
  • <!--more-->
  • 布尔值:
  • %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

例子

  • package main
  • import "fmt" //一定不要忘了
  • type point struct{
  • x,y int
  • }
  • func test(i , j int) int{ return i+j;}
  • func main(){
  • p := point{1,2}
  • fmt.Printf("%d\n",p) // {1 2}
  • fmt.Printf("%+v\n",p) // {x:1 y:2}
  • fmt.Printf("%#v\n",p) // main.point{x:1, y:2}
  • //输出类型
  • fmt.Printf("%T\n",p) // main.point
  • //输出函数签名
  • fmt.Printf("%T\n",test) //func(int ,int) int
  • //输出bool值
  • flag := true
  • fmt.Printf("%t\n",flag) // true
  • //尝试将一个字符串作为参数来输出bool值,不要尝试这样做
  • fmt.Printf("%t\n","true") //%!t(string=true)
  • //输出十进制形式输出
  • fmt.Printf("%d\n",123) // 123
  • //输出一个字符,参数对应ASCII码
  • fmt.Printf("%c\n",98) // b
  • //输出一个整数的二进制形式的值
  • fmt.Printf("%b\n",98) // 1100010
  • //输出一个字符的二进制形式的值
  • fmt.Printf("%b\n",'b') // 1100010
  • //如果参数是数字,则以十六进制形式输出
  • fmt.Printf("%x\n",456) // 1c8
  • //如果参数是字符串,则打印字符串的每一个字符的ASCII码
  • fmt.Printf("%x\n","hex this") // 6865782074686973
  • //浮点数形式输出,注意小数位数为6位
  • fmt.Printf("%f\n",78.53) // 78.530000
  • //注意这里前后不对应,不会报错,但是不会自动转换
  • fmt.Printf("%d\n",78.53) // %!d(float64=78.53)
  • //科学计数法的形式,注意参数要为小数,不为小数,可以乘1.0
  • fmt.Printf("%e\n",123400000000.0) //1.234000e+11 注意参数为小数
  • //科学计数法的形式,注意参数要为小数,不为小数,可以乘1.0
  • fmt.Printf("%E\n",123000000000.0) //1.234000E+11
  • //输出字符串
  • fmt.Printf("%s\n","\"ddadjfaskdafjasfsaf") //"ddadjfaskdafjasfsaf
  • //保留字符串两端的双引号
  • fmt.Printf("%q\n","\"dddddddd\"") // "\"dddddddd\""
  • //输出指针(地址)的值
  • fmt.Printf("%p\n",&p) //0xc420012090
  • //最小宽度为6,默认右对齐,不足6位时,空格补全,超过6位时,不会截断
  • fmt.Printf("|%6d|%6d|\n",12,1234567) // | 12|1234567|
  • //最小6个宽度(包含小数点),2位小数,超过6位时,不会截断
  • fmt.Printf("|%6.2f|%6.2f|\n",12,222.333) // |%!f(int= 12)|222.33|
  • //使用 - 表示左对齐
  • fmt.Printf("|%-6.2f|%-6.2f|\n",12.2,3.33) //|12.20 |3.33 |
  • //最小6个宽度,右对齐,不足6个时,空格补齐,超过6位时,不会截断
  • fmt.Printf("|%6s|%6s|\n","foo","abcdefgg") //| foo|abcdefgg|
  • ////最小6个宽度,右对齐,不足6个时,空格补齐,超过6位时,不会截断
  • fmt.Printf("|%-6s|%-6s|\n","foo","abcdeefgth") //|foo |abcdeefgth|
  • //不会输出内容,相反,会将内容以字符串的形式返回
  • s:= fmt.Sprintf("a %s","string")
  • fmt.Println(s) //a string
  • }
golang

本文链接:http://blog.go2live.cn/post/go-printf.html

-- EOF --