代码
// 基本数据类型的相互转换
package main
import (
// 如果一个包没有被使用过,但又不想去掉,可在包名前加"_ "表示忽略
// 比如:_ "unsafe"
"fmt"
_ "unsafe"
)
func main() {
// n1为int类型
var n1 int = 100
// n2为int64类型,将n1赋值给n2的时候,需要将n1显式的转换为int64类型
var n2 int64 = int64(n1)
// 同上,需要将n1显式转换为int8类型
var n3 int8 = int8(n1)
// 同上,需要将n1显式转换为float32类型
var f1 float32 = float32(n1)
// 格式化输出结果
// 可以看出不管将n1显式转换为什么类型,最后n1自身的类型仍然不变还是int类型
fmt.Printf("n1 = %v, n2 = %v, n3 = %v, f1 = %v, 最后n1的类型为%T\n", n1, n2, n3, f1, n1) // n1 = 100, n2 = 100, n3 = 100, f1 = 100, 最后n1的类型为int
// n4为int32类型
var n4 int32 = 1000
// n5为int8类型,将n4赋值给n5,需要将n4从
// int32显式转换为int8,此时n4的值为1000大
// 于int8的最大值127,此时会按溢出处理,最终
// 输出的结果会与之前的不一样,输出-24
var n5 int8 = int8(n4)
// 格式化输出结果
fmt.Printf("n4 = %v, n5 = %v\n", n4, n5) // n4 = 1000, n5 = -24
// 练习1
var t1 int32 = 12
var t2 int64
var t3 int8
// t1 + 50 是int32类型
// 需要将t1转换为int64
t2 = int64(t1) + 50
// t1 + 50 是int32类型
// 需要将t1转换为int8
t3 = int8(t1) + 50
// 格式化输出结果
fmt.Printf("t1 = %v, t2 = %v, t3 = %v\n", t1, t2, t3) // t1 = 12, t2 = 62, t3 = 62
// 练习2
var t4 int32 = 15
var t5 int8
var t6 int8
// 输出结果会按溢出处理,但是编译时不会报错
t5 = int8(t4) + 127
// 报错:constant 128 overflows int8,编译无法通过
// t6 = int8(t4) + 128
fmt.Printf("t4 = %v, t5 = %v, t6 = %v\n", t4, t5, t6) // t4 = 15, t5 = -114, t6 = 0
}
总结
查看源代码