官方教程:https://tour.go-zh.org/basics/13
基本介绍。
Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换。
1. 基本语法
表达式 T(v) 将值 v 转换为类型 T。
T: 就是数据类型,比如 int32,int64,float32 等等。
v: 就是需要转换的变量。
例子:
package main
import "fmt"
func main() {
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
//输出:42 42 42
fmt.Println(i,f,u)
i2 := 42
f2 := float64(i)
u2 := uint(f)
//输出:42 42 42
fmt.Println(i2,f2,u2)
}
与 C 不同的是,Go 在不同类型的项之间赋值时需要显式转换。否则报错。
2. 注意事项
- Go 中,数据类型的转换可以是从 范围小类型-->范围大类型,也可以 范围大类型--->范围小类型。
- 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化。
- 在转换中,比如将 int64 转成 int8 【-128---127】 ,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围。
转换溢出的例子:
package main
import "fmt"
func main() {
var i int = 130
var u int8 = int8(i) //数据溢出
//输出 -126
fmt.Println(u)
}
算术运算中,运算结果赋值为其他类型。例子:
package main
import "fmt"
func main() {
var n1 int32 = 5
var n2 int64
//编译报错:n1是int32加上20还是int32,要转换为int64必须显示转换。
//正确的写法:n2 = int64(n1 + 20) 或者 int64(n1) + 20
n2 = n1 + 20
}