[golang]语法基础之数据类型转换

在一些编程语言里面,存在着隐式类型转换,例如JavaScript。

var a = 10 
var b = "a"
console.log(a + b) // 10a

上面的js代码在执行的时候发生了隐式类型转换,将number类型的变量a自动转换为了字符串,和字符串类型的b执行相加后,发生了字符串的拼接。

但是这种隐式的类型转换,在go语言当中是不存在的。

go必要的情况下,允许将一个类型的值转换为另外一个类型的值。但是所有的类型转换都必须显示的声明出来。

示例:

valTypeB = TypeB(valTypeA)

类型B的值 = 类型B(类型A的值)

例如下面的例子:

// 定义一个变量
var s1 string = "hello,world"
var a = []byte(s1) // 将字符串转换为数组
var n1 float64 = 1.0
var b int = int(n1) // 将float64转换为整型

类型转换只能在定义正确的情况下转换成功,例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将 int16 转换为 int32)。当从一个取值范围较大的类型转换到取值范围较小的类型时(将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。

只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型),不同底层类型的变量相互转换时会引发编译错误(如将 bool 类型转换为 int 类型):

// int 32 最大值:2147483647
var n1 int64 = 2147483648
var n2 int32 = int32(n1)
fmt.Println(n2) // -2147483648
// 底层不同的数据进行转换
var b1 bool = true
var n1 int = int(b1)
fmt.Println(n1) // cannot convert b1 (type bool) to type int

猜你喜欢

转载自www.cnblogs.com/liujunhang/p/12534420.html