Golang占位符
fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. 格式“占位符”衍生自C,但比C更简单。
占位符:
一般:
%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 无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat的 ‘b’ 转换格式一致。例如 -123456p-78
%e 科学计数法,例如 -1234.456e+78
%E 科学计数法,例如 -1234.456E+78
%f 有小数点而无指数,例如 123.456
%g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
%G 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出
字符串与字节切片:
%s 字符串或切片的无解译字节
%q 双引号围绕的字符串,由Go语法安全地转义
%x 十六进制,小写字母,每字节两个字符
%X 十六进制,大写字母,每字节两个字符
指针:
%p 十六进制表示,前缀 0x
ep:
package main import "fmt" func main() { var str string var person struct { name string age int } person.name = "老王" person.age = 50 str = "hello world" fmt.Println("====一般占位符====") fmt.Printf("%v\n", str) //hello world fmt.Printf("%v\n", person) //{老王 50} fmt.Printf("%+v\n", person) //{name:老王 age:50} fmt.Printf("%#v\n", str) //"hello world" fmt.Printf("%#v\n", true) //true fmt.Printf("%T\n", str) //string fmt.Printf("%T\n", true) //bool fmt.Printf("%%\n") //% fmt.Println("====布尔====") fmt.Printf("%t\n", true) fmt.Println("====整数====") fmt.Printf("%b\n", 65) //1000001 fmt.Printf("%c\n", 65) //A fmt.Printf("%d\n", 65) //65 fmt.Printf("%o\n", 65) //101 fmt.Printf("%q\n", 65) //'A' fmt.Printf("%x\n", 31) //1f fmt.Printf("%X\n", 31) //1F fmt.Printf("%U\n", 31) //U+001F fmt.Println("====浮点数及其复合构成====") fmt.Printf("%b\n", 10.5) //5910974510923776p-49 fmt.Printf("%e\n", 10.5) //1.050000e+01 fmt.Printf("%E\n", 10.5) //1.050000E+01 fmt.Printf("%f\n", 10.5) //10.500000 fmt.Printf("%g\n", 10.5) //10.5 fmt.Printf("%G\n", 10.5) //10.5 fmt.Println("====字符串与字节切片====") fmt.Printf("%s\n", "abc") //abc fmt.Printf("%q\n", "abc") //"abc" fmt.Printf("%x\n", "abc") //616263 fmt.Printf("%X\n", "abc") //616263 fmt.Println("====指针====") fmt.Printf("%p\n", &str) //0xc0000441f0 }