有符号的整数——int

在GoLang中,有符号的整数类型有如下几种

-128~127-2^15~2^15-1-2^31~2^31-1-2^63~2^63-1
-2^31~2^31-1-2^63~2^63-1
无符号的整数——uint

与上文的有符号的整数int相比,无符号uint的特点则是这类数据类型的最小值一定等于0,不会出现像int一样表数范围最小值涉及负数的情况。
通俗来说,uint存放非零整数的数据类型
与上文的int一样,uint也有好几种类型,如下:

0~2550~2^16-10~2^32-10~2^64-10~2^32-1
与int和uint有关联的其他数据类型

GoLang中其他数据类型与int或uint有相似的地方,但他们的的用途却不一样

byte与uint的关系

0~2550~255

rune与int的关系

runeint32等价,他们的表数范围和所占空间都是一样的,但是rune所代表的是一个Unicode码,它似乎也可以存放字符,它的使用准则也与byte类似,rune不该被用来存储与int一样的数据

验证

unsafe.Sizeof()
	var a int32 = 10
	var b uint8 = 20
	var c rune = 30
	var d byte = 40
	fmt.Printf("int所占的字节数为%d\n", unsafe.Sizeof(a)) //4
	fmt.Printf("uint所占的字节数为%d\n", unsafe.Sizeof(b)) //1
	fmt.Printf("rune所占的字节数为%d\n", unsafe.Sizeof(c)) //4,证明了rune与int32等价
	fmt.Printf("byte所占的字节数为%d\n", unsafe.Sizeof(d)) //1,证明了byte与uint8等价
重点说明

我们学习完以上的intuint以及他们衍生的数据类型,你是否认为他们就是一个大家族的人,不同类型的数值可以相互四则运算?这是错误的
无论是int32还是int64,他们终究不是同一类型,而在GoLang中不同的数据类型是不可以进行四则运算的,例如下面的代码

	var a int = 10
	var b uint = 20
	c := a + b;//a与b一个是int(64)一个是uint,不是同一个类型不能运算

你会想问:可以有别的方式让不同数据类型的数值进行四则运算呢?很遗憾并没有,倘如真想让不同数据类型的数值相加,只有进行强制类型转换,转成相同的数据类型,才能够相加,例如

	var a int = 10
	var b uint = 20
	c := a + uint(b);//进行类型转换后,加号左右两边的数据类型都是int,这就可以相加了

简单总结,不同的数据类型是不能够相加的
可能我们学习惯了Python这样的动态语言,可以随意的对不同数据进行运算,但是呢这也变相的增加了我们的代码不规范性,而GoLang对我们进行了规范限制,让我们尽可能使用相同的数据类型,就算使用不同的数据类型,也要保证我们进行运算的数值类型相统一,正如同我在上篇GoLang的变量命名提到的一样,定义的局部变量是一定要使用的,不要出现定义了但不实用的局部变量,这同样也是增加我们代码规范性的方式。总而言之,GoLang看似苛刻的条件实际上也是为了保证不规范代码的出现,统一GoLang开发者的代码水平,那么就需要我们记住GoLang代码的规范,这或许也能帮助我们写出其他语言的规范代码

谢谢你阅读本篇文章,喜欢的话可以点个赞,如果发现文章存在部分错误的表述,欢迎指出,你的纠正是我提升的机会。