Go 基础数据类型 数据类型转化

Go语言是强类型, 如果需要对数据进行类型转换,需要手动进行, 转换数据类型的简单方法是直接通过类型()方式:

valueOfTypeB = typeB(valueOfTypeA)

例如:

a := 3.14
b := int(a)

我们可以通过: 标准库 reflect包中的TypeOf方法查看一个变量的类型, 比如:

a := 10
b := 0.1314
c := "hello"

fmt.Printf("a type: %v\n", reflect.TypeOf(a))
fmt.Printf("b type: %v\n", reflect.TypeOf(b))
fmt.Printf("c type: %v\n", reflect.TypeOf(c))

 

自定义类型转换


Go允许我们通过type定义自己的类型,自己定义的类型和该类型不是同一类型了,比如:

type Age int
var a Age = 10
var b int = 20
fmt.Println(reflect.TypeOf(a))  // day2.Age
fmt.Println(reflect.TypeOf(b))  // int

此时我们定义的Age类型已经不再是int类型了, 只是该类型底层的值为int

// Age 底层数据结构为 int
type Age int
// a 类型是Age 底层为 int 10
var a Age = 10

// 将a转化成int类型,
// 由于a是Age, 转化成int后, 他们不是同一种类型,不能再次赋值回去: a = int(a) 是不行的
b := int(a)
// 现在b是int类型
fmt.Println(reflect.TypeOf(b))

// 反过来我们也可以将int类型转换为Age类型
c := Age(10)
// 现在c就是Age类型,而不是int类型了
fmt.Println(reflect.TypeOf(c))

 

 

直接转换


对于数值类 的类型 比如 int类 uint类 float类 他们直接是可以相互转换的

var a float64 = 5.3232223232323
fmt.Println(float32(a))
fmt.Println(int(a))
fmt.Println(int8(a))
fmt.Println(int16(a))
fmt.Println(int32(a))
fmt.Println(int64(a))
fmt.Println(uint(a))

1.精度损失问题 低精度转换为高精度时是安全的,高精度的值转换为低精度时会丢失精度。例如int32转换为int16,float32转换为int

2.跨大类型转换无法转换 不是所有数据类型都能转换的,例如字母格式的string类型"abcd"转换为int肯定会失败

var a float64 = 5.3232223232323
fmt.Println(string(a)) // 这种会报错

 

Guess you like

Origin blog.csdn.net/qq_34556414/article/details/121928310