fmt.Printf()用法
1. 进制转换
1.1 %T
获取数据类型
var a = 100
var s="bowen"
fmt.Printf("%T\n",a)
fmt.Printf("%T\n",s)
out
int
string
1.2 %d
十进制输出
%d
可以将二进制、八进制、十六进制转换成十进制输出,使用golang写过一个进制转换器用的就是它!
var a = 100
var x = 0b10
var y = 0xa
var z = 010
fmt.Printf("%d\n",a)
fmt.Printf("%d %d %d\n",x,y,z)
out
100
2 10 8
1.3 %b,%#b 二进制输出
%b
可以将十进制、八进制、十六进制转换成二进制输出,使用golang写过一个进制转换器用的就是它
var m = 100
var o = 010
var x = 0xa
fmt.Printf("%b %b %b\n", m, o, x)
out
1100100 1000 1010
%#b
可以输出0b开头的便于识别
fmt.Printf("%#b\n", 4)
fmt.Printf("%b\n", 4)
out
0b100
100
1.4 %x,%X,%#x,%#X十六进制输出
%x
可以将十进制、八进制、二进制转换成十六进制输出,使用golang写过一个进制转换器用的就是它
var m = 100
var o = 010
var x = 0b10
fmt.Printf("%x %x %x\n", m, o, x)
out
64 8 2
为了规范或者一眼看出来是16进制,输出十六进制书时一般加%#x
,%#X
,可以输出0x,或0X,
var x = 100
fmt.Printf("%x,%#x\n", x, x)
fmt.Printf("%X,%#X\n", x, x)
out
64,0x64
64,0X64
1.5 %o,%#o 八进制输出
%o
可以将十进制、二进制、二进制转换成八进制输出,使用golang写过一个进制转换器用的就是它,利用%o,%d,%x,%b,写了一个简易的进制转换器,还挺好用的!不要问为啥不直接使用在线工具,在线工具用起来哪有用自己写的有成就感!
var m = 100
var o = 0xa
var x = 0b10
fmt.Printf("%o %o %o\n", m, o, x)
out
144 12 2
一般为了规范或者一眼看出来是八进制数据,可以使用%#o
规范输出。
var m = 100
var o = 0xa
var x = 0b10
fmt.Printf("%#o %#o %#o\n", m, o, x)
out
0144 012 02
1.6 %v 输出值
var s = "bowen"
fmt.Printf("%v %v\n", a, s)
fmt.Printf("%#v %#v\n", a, s)
out
1 bowen
1 "bowen"
从上面几个例子可以看出,golang中默认为十进制,当赋值为0x开头时,会识别为十六进制,当赋值为0开头时,会识别为八进制,当赋值为0b开头时,会识别为二进制。自己也利用上面几个特性,写了一个简易的进制转换器,方便数值转换。给出一个数字,就可以利用golang的Printf格式化输出其他进制
。
1.7 综合示例
//数据类型禁止转换
//一般用到8进制是在设置文件权限会用到。十六进制在涉及内存地址的时候会用到
func main() {
var i1 = 101
fmt.Printf("%d\n", i1)
fmt.Printf("%o\n", i1)
fmt.Printf("%x\n", i1)
fmt.Printf("%b\n", i1)
i2 := 077 // 八进制
fmt.Printf("%d\n", i2)
// 十六进制
i3 := 0x1234567
fmt.Printf("%d\n", i3)
//打印类型
fmt.Printf("%T\n", i3)
// 明确指定类型
i4 := int8(9)
fmt.Printf("%T\n", i4)
}
out
101
145
65
1100101
63
19088743
int
int8
2. 字符类
2.1 %v输出值
%#v输出
var a = 1
var s = "bowen"
fmt.Printf("%v %v\n", a, s)
fmt.Printf("%#v %#v\n", a, s)
out
1 bowen
1 "bowen"
2.2 %s 字符串
注意这里是字符串,不是单个字符
var s = "bowen"
fmt.Printf("%c\n", s) // 这样是不对的,但是程序也不会抛错
fmt.Printf("%s\n", s)
%!c(string=bowen)
bowen
2.3 %c单个字符
除了输出单个字符外,%c还有其他用法,后面遇到了再补充。
var c = 'c'
fmt.Printf("%c\n", c)
fmt.Printf("%s\n", c) //这样写是不对的,虽然不会报错
out
c
%!s(int32=99)
3. %t布尔类型
var b1 bool = true
var b2 bool
fmt.Printf("%T %v\n", b1, b1)
fmt.Printf("%T %v\n", b2, b2)
fmt.Printf("%t\n", b1)
out
bool true
bool false
true
4. 浮点型
浮点数, %.2f
表示保留 2 位小数, %f
默认保留 6 位, %f 与 %F 等价
f1 := 1.23456
fmt.Printf("%T\n", f1) // 默认go语言的小数类型都是float64
fmt.Printf("%.2f\n", f1)
fmt.Printf("%f\n", f1)
f2 := float32(1.23456)
fmt.Printf("%T\n", f2) // 显示声明32类型的浮点数
//float32和float64 不能直接赋值,是两种不同的数据类型
out
float64
1.23
1.234560
float32
剩下的就不多介绍了,用到后再继续补充在这个文档里,边学边用边积累,可以参考:整理 Go 语言中 20 个占位符!