Go 基本数据类型转换及细节讨论

基本数据类型转换


  • 基本介绍
    • Golang java / c 不同,Go 不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换
  • 基本语法
  • 表达式  T(v)  将值 v 转换为类型 T
    • T就是数据类型,比如 int32int64float32 等等
    • v就是需要转换的变量
  • 案例演示1:
var n1 int32 = 100
//希望将 n1转换成 float
var n2 float32 = n1
  • 结果报错:


  • 案例演示2:
var n1 int32 = 100
var n2 float32 = float32(n1)
var n3 int8 = int8(n1)
fmt.Printf("n1 = %v ,n2 = %v ,n3 = %v", n1, n2, n3)
  • 结果:


基本数据类型转换细节讨论

  • Go 中,数据类型的转换可以是从 表示范围小 -> 表示范围大,也可以 范围大 -> 范围小
  • 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!

  • 把n1的值,也就是100转换成float32,但是n1仍然是int32类型。
var n1 int32 = 100
var n2 float32 = float32(n1)
fmt.Printf("n1 type is %T\n", n1)
fmt.Printf("n2 type is %T", n2)
  • 输出结果:


  • 在转换中,比如将 int64 转成 int8 -128---127】 ,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围.
//转换的结果是按溢出处理
var n1 int64 = 999999
var n2 int8 = int8(n1)
fmt.Println("n2 = ", n2)
  • 输出结果:


  • 案例练习1:

Go 基本数据类型转换及细节讨论_第1张图片

  • 改正:

Go 基本数据类型转换及细节讨论_第2张图片


  • 案例练习2:

Go 基本数据类型转换及细节讨论_第3张图片

  • n3 = int(n1) + 128,128本身超出 int8 范围,所以无法编译通过。

你可能感兴趣的:(Golang基础)