1.类型转换
只有相互兼容的类型之间才可以转换,不兼容的类型,如果使用了转换函数,在编译时会出错。
1.1不兼容类型的错误示范
已知:bool型和int型不兼容
package main
import "fmt"
func main(){
var a int = 10
var b bool = true
fmt.Println(bool(a)) //试图把a变为bool类型输出
}
1.2兼容类型示例
已知:int32和float32互相兼容
package main
import "fmt"
func main(){
var a int32 = 100
fmt.Println(float32(a))
fmt.Printf("%T\n",a) //格式化输出a的类型
fmt.Printf("%T\n",float32(a)) //格式化输出float32(a)转换后的类型
}
1.3转换类型时的坑
我们不难猜测出哪些类型是兼容的,哪些是不兼容的。如需详细了解类型的转换,请参阅更详细的资料。
但是,我们还是经常在转换类型时出错,往往编译不会报错,但是得到的结果却让人匪夷所思。
如下:
package main
import "fmt"
func main(){
var a int32 = 156
fmt.Printf("%d %T\n", a,a)
fmt.Printf("%d %T\n",int8(a),int8(a))
}
上面这个程序,在语法上不存在问题,在编译时也不会报错。但是结果却让我们很意外。
为什么会出现这种情况呢?
这就牵涉到前面讲的基本数据类型了。
回顾一下《05_基础数据类型》里的那张表。
由此,我们发现int8的取值范围在-128~127之间,而我们定义的156超出了这个范围,导致了数据溢出,而出现异常。
所以,我们在转换类型的时候,通常由低类型转化为高类型。
例如:
int8—>int64
float32—>float64
2.类型别名
熟悉python的同学,看到别名这个次,很容易联想到python中导入库时的操作。
#python导入库时采取别名
import requests as r
golang中的类型别名和python的库导入有异曲同工之妙。
2.1 基本语法
type 别名 类型名
2.2类型别名示例
package main
import "fmt"
func main(){
type big_int int64 //把int64类型,称为big_int
var a big_int = 100 //等价于var a int64 = 100
fmt.Printf("数值:%d\n",a)
fmt.Printf("类型:%T\n",a)
}
输出: