【go学习合集】外记1 ------->总结fmt包中各种占位符

常规占位符

占位符介绍
%v按值的默认格式输出
%+v在结构体时,会添加字段名
%#v输出Go语法表示的值
%T输出值的类型

%v

package main

import "fmt"

func main() {
	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 = [1 2 3 4 5]
 f = [1 2 3 4 5]
 g = map[a:1 b:2]
 h = true
 j = {1 hello world}
 k = &{1 hello world}
 l = 1

%+v

package main

import "fmt"

func main() {
	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 = [1 2 3 4 5]
 f = [1 2 3 4 5]
 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"

func main() {
	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"

func main() {
	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"

func main() {
	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
%UUnicode格式:U+1234,等同于 “U+%04X”
package main

import "fmt"

func main() {
	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"

func main() {
	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"

func main() {
	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"

func main() {
	a := "abcde"
	b := &a
	fmt.Printf("%%p=%p", b)
}
---------------------------运行结果-------------------------
%p=0x1400010a230

问题探讨

如果fmt中的格式和实际不相符会怎样

package main

import "fmt"

func main() {
	s := "abcde"
	fmt.Printf("s = %d", s)
}
---------------------------运行结果-------------------------
s = %!d(string=abcde)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值