package main
import"fmt"funcmain(){
a :=int(8)
b :=uint(8)
c :=float32(22.85)
d :=string("hello world")
e :=[5]int64{1,2,3,4,5}
f :=[]int64{1,2,3,4,5}
g :=map[string]int64{"a":1,"b":2}
h :=bool(true)
j :=struct{
a int
b string}{
a:1,
b:"hello world",}
k :=&j
l :=interface{}(1)
fmt.Printf(" a = %v\n", a)
fmt.Printf(" b = %v\n", b)
fmt.Printf(" c = %v\n", c)
fmt.Printf(" d = %v\n", d)
fmt.Printf(" e = %v\n", e)
fmt.Printf(" f = %v\n", f)
fmt.Printf(" g = %v\n", g)
fmt.Printf(" h = %v\n", h)
fmt.Printf(" j = %v\n", j)
fmt.Printf(" k = %v\n", k)
fmt.Printf(" l = %v\n", l)}---------------------------运行结果-------------------------
a =8
b =8
c =22.85
d = hello world
e =[12345]
f =[12345]
g =map[a:1 b:2]
h =true
j ={1 hello world}
k =&{1 hello world}
l =1
%+v
package main
import"fmt"funcmain(){
a :=int(8)
b :=uint(8)
c :=float32(22.85)
d :=string("hello world")
e :=[5]int64{1,2,3,4,5}
f :=[]int64{1,2,3,4,5}
g :=map[string]int64{"a":1,"b":2}
h :=bool(true)
j :=struct{
a int
b string}{
a:1,
b:"hello world",}
k :=&j
l :=interface{}(1)
fmt.Printf(" a = %+v\n", a)
fmt.Printf(" b = %+v\n", b)
fmt.Printf(" c = %+v\n", c)
fmt.Printf(" d = %+v\n", d)
fmt.Printf(" e = %+v\n", e)
fmt.Printf(" f = %+v\n", f)
fmt.Printf(" g = %+v\n", g)
fmt.Printf(" h = %+v\n", h)
fmt.Printf(" j = %+v\n", j)
fmt.Printf(" k = %+v\n", k)
fmt.Printf(" l = %+v\n", l)}---------------------------运行结果-------------------------
a =8
b =8
c =22.85
d = hello world
e =[12345]
f =[12345]
g =map[a:1 b:2]
h =true
j ={a:1 b:hello world}
k =&{a:1 b:hello world}
l =1
%#v
package main
import"fmt"funcmain(){
a :=int(8)
b :=uint(8)
c :=float32(22.85)
d :=string("hello world")
e :=[5]int64{1,2,3,4,5}
f :=[]int64{1,2,3,4,5}
g :=map[string]int64{"a":1,"b":2}
h :=bool(true)
j :=struct{
a int
b string}{
a:1,
b:"hello world",}
k :=&j
l :=interface{}(1)
fmt.Printf(" a = %#v\n", a)
fmt.Printf(" b = %#v\n", b)
fmt.Printf(" c = %#v\n", c)
fmt.Printf(" d = %#v\n", d)
fmt.Printf(" e = %#v\n", e)
fmt.Printf(" f = %#v\n", f)
fmt.Printf(" g = %#v\n", g)
fmt.Printf(" h = %#v\n", h)
fmt.Printf(" j = %#v\n", j)
fmt.Printf(" k = %#v\n", k)
fmt.Printf(" l = %#v\n", l)}---------------------------运行结果-------------------------
a =8
b =0x8
c =22.85
d ="hello world"
e =[5]int64{1,2,3,4,5}
f =[]int64{1,2,3,4,5}
g =map[string]int64{"a":1,"b":2}
h =true
j =struct{ a int; b string}{a:1, b:"hello world"}
k =&struct{ a int; b string}{a:1, b:"hello world"}
l =1
%T
package main
import"fmt"funcmain(){
a :=int(8)
b :=uint(8)
c :=float32(22.85)
d :=string("hello world")
e :=[5]int64{1,2,3,4,5}
f :=[]int64{1,2,3,4,5}
g :=map[string]int64{"a":1,"b":2}
h :=bool(true)
j :=struct{
a int
b string}{
a:1,
b:"hello world",}
k :=&j
l :=interface{}(1)
fmt.Printf(" a = %T\n", a)
fmt.Printf(" b = %T\n", b)
fmt.Printf(" c = %T\n", c)
fmt.Printf(" d = %T\n", d)
fmt.Printf(" e = %T\n", e)
fmt.Printf(" f = %T\n", f)
fmt.Printf(" g = %T\n", g)
fmt.Printf(" h = %T\n", h)
fmt.Printf(" j = %T\n", j)
fmt.Printf(" k = %T\n", k)
fmt.Printf(" l = %T\n", l)}---------------------------运行结果-------------------------
a =int
b =uint
c =float32
d =string
e =[5]int64
f =[]int64
g =map[string]int64
h =bool
j =struct{ a int; b string}
k =*struct{ a int; b string}
l =int
布尔值
占位符
介绍
%t
输出true或false
package main
import"fmt"funcmain(){var a bool
b :=true
fmt.Printf("a = %t\n", a)
fmt.Printf("b = %t\n", b)}---------------------------运行结果-------------------------
a =false
b =true
整数
占位符
介绍
%b
二进制表示
%c
相应的Unicode码点所表示的字符
%d
十进制表示
%o
八进制表示
%O
带前缀 0o 的八进制表示
%q
单引号围绕的字符字面值,由Go语法安全地转义
%x
十六进制表示,使用a-f
%X
十六进制表示,使用A-F
%U
Unicode格式:U+1234,等同于 “U+%04X”
package main
import"fmt"funcmain(){
a :=67
fmt.Printf("%%b=%b\n%%c=%c\n%%d=%d\n%%o=%o\n%%O=%O\n%%q=%q\n%%x=%x\n%%X=%X\n%%U=%U\n", a, a, a, a, a, a, a, a, a)}---------------------------运行结果-------------------------%b=1000011%c=C
%d=67%o=103%O=0o103%q='C'%x=43%X=43%U=U+0043
浮点数和复数
占位符
介绍
%b
无小数部分的科学计数法(指数为二的幂)
%e
科学计数法,例如 -1234.456e+78
%E
科学计数法,例如 -1234.456E+78
%f
有小数部分但无指数,例如 123.456
%F
等同于%f
%g
根据实际情况采用%e或%f格式(以获得更紧凑的输出)
%G
根据实际情况采用%E或%F格式(以获得更紧凑的输出)
%.[n]f
指定小数点后的精度为n
package main
import"fmt"funcmain(){
a :=67.323
fmt.Printf("%%b=%b\n%%e=%e\n%%E=%E\n%%f=%f\n%%F=%F\n%%g=%g\n%%G=%G\n%%.3f = %.3f\n%%.3g =%.3g", a, a, a, a, a, a, a, a, a)}---------------------------运行结果-------------------------%b=4737434964272873p-46%e=6.732300e+01%E=6.732300E+01%f=67.323000%F=67.323000%g=67.323%G=67.323%.3f =67.323%.3g =67.3
字符串
占位符
介绍
%s
字符串或切片的无解译字节
%q
双引号围绕的字符串字面值,由Go语法安全地转义
%x
每个字节用两字符十六进制表示(小写字母)
%X
每个字节用两字符十六进制表示(大写字母)
package main
import"fmt"funcmain(){
a :="abcde"
fmt.Printf("%%s=%s\n%%q=%q\n%%x=%x\n%%X=%X", a, a, a, a)}---------------------------运行结果-------------------------%s=abcde
%q="abcde"%x=6162636465%X=6162636465
指针
占位符
介绍
%p
表示为十六进制,并加上前导的0x
package main
import"fmt"funcmain(){
a :="abcde"
b :=&a
fmt.Printf("%%p=%p", b)}---------------------------运行结果-------------------------%p=0x1400010a230
问题探讨
如果fmt中的格式和实际不相符会怎样
package main
import"fmt"funcmain(){
s :="abcde"
fmt.Printf("s = %d", s)}---------------------------运行结果-------------------------
s =%!d(string=abcde)