前言
数字类型当然是用来表示数字的,分为整型和浮点型。
整型
整型用来存储整数,Go有几种不同大小的内置整数类型,用于存储有符号和无符号整数。
有符号整型

int类型的大小取决于机器,在32位机器上是32 bits,在64位机器上则是64 bits。
无符号整型

uint的大小也取决于机器。
使用整数值时,除非有充分的理由必须使用符合大小的无符号整数类型,否则应始终使用
int数据类型。
举个🌰:
medals := []string{"gold", "silver", "bronze"}
for i := len(medals) - 1; i >= 0; i-- {
fmt.Println(medals[i]) // "bronze", "silver", "gold"
}
程序的意思一眼就能看懂:循环输出数组的元素。
看下,程序有没有问题?如果len函数返回一个无符号数,那么i也将是无符号的uint类型,然后条件i >= 0则永远为真。在三次迭代之后,也就是i == 0时,i--语句将不会产生-1,而是变成一个uint类型的最大值(可能是 - 1),然后
medals[i]表达式运行时将发生访问异常。
var myInt8 int8 = 97
// 变量不声明类型,系统默认 int类型
var myInt = 1200
var myUint uint = 500
var myHexNumber = 0xFF // '0x' or '0X' 前缀 表示16进制数
var myOctalNumber = 034 // '0' 前缀表示8进制数
fmt.Printf("%T\n",myInt) // %T 输出变量类型
fmt.Printf("%d, %d, %d, %#x, %#o\n", myInt8, myInt, myUint, myHexNumber, myOctalNumber)
// %后的 # 副词告诉Printf在用%o、%x或%X输出时生成0、0x或0X前缀。
输出:

uintptr,没有指定具体的bit大小但是足以容纳指针。uintptr类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方,我们以后再讲它的用法。
整型别名
Golang还有另外两种整数类型:byte和rune,它们分别是uint8和int32的别名:

char字符类型,byte和rune用于强调字符而不是整型值。
byte用来表示ASCII字符,rune表示以UTF-8格式编码的Unicode码点。
字符在Go中怎么表示呢?用单引号括起来,例如:'A'
字符默认的类型是rune,所以,如果在声明一个字符变量时没有指明类型,Go编译器会默认是rune:
var myByte = 'A'
fmt.Printf("%T\n",myByte)
输出:int32,rune是int32的别名嘛,所以输出int32。
那我们就直接使用byte指明变量的类型:
var lastLetter byte = 'Z'
byte和rune实质上都是整数,例如,byte类型的'A'可以转成整型值97;类似的,rune类型的Unicode字符'♥'可以转成对应的Unicode码点U+2665(U+用来表示unicode,2665是十六进制数值),实质上也是整型。
var myByte byte = 'a'
var myRune rune = '♥'
fmt.Printf("%c = %d and %c = %U\n", myByte, myByte, myRune, myRune)
输出:a = 97 and ♥ = U+2665
上面的例子中,输出的是byte变量myByte和对应的十进制数字、rune变量myRune和对应的Unicode码。
浮点数
浮点数用户存储带小数点的数字,Go有两种浮点数float32和float64。
float32,32位,单精度;float64,64位,双精度;
默认的浮点型是float64,所以,但你初始化一个浮点型的变量而没有指明是哪种浮点类型时,编译器默认是float64。
var a = 9715.635 //默认float64
类型转化
Go的类型系统非常强大,不允许你在表达式中将数字类型混淆。例如,不允许int和float64类型执行相加操作,甚至连int和int64之间也不能:
var a int64 = 4
var b int = a // 编译出错 (Cannot use a (type in64) as type int in assignment)
var c int = 500
var result = a + c // 编译出错 (Invalid Operation: mismatched types int64 and int)
与其他静态类型语言(如C,C ++和Java)不同,Go是不提供任何隐式类型转换的。好了,如果你非要在不同类型的数字之间执行类似相加、相减等操作,怎么办?类型转换,转换成你需要的类型,语法是这样的:
T(v),T就是目标类型,v是想转的值:
var a int64 = 4
var b int = int(a) // 显式类型转换
var c float64 = 6.5
// 显式类型转换
var result = float64(b) + c // Works
输出:10.5
(全文完)
原创文章,若需转载请注明出处!
欢迎扫码关注公众号「Golang来啦」或者移步 seekload.net ,查看更多精彩文章。
公众号「Golang来啦」给你准备了一份神秘学习大礼包,后台回复【电子书】领取!
