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 个占位符!

posted @ 2022-09-01 11:30  sunnybowen  阅读(235)  评论(0编辑  收藏  举报