数字类型固然是用来表示数字的,分为整型和浮点型。编程
整型用来存储整数,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]
表达式运行时将发生访问异常。ui
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
的别名: spa
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
是十六进制数值),实质上也是整型。.net
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码。3d
浮点数用户存储带小数点的数字,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来啦」给你准备了一份神秘学习大礼包,后台回复【电子书】领取!