ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-14 16:03:14  阅读:264  来源: 互联网

标签:int Age 数据类型 转化 Println TypeOf 类型 Go fmt


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)) // 这种会报错

 

标签:int,Age,数据类型,转化,Println,TypeOf,类型,Go,fmt
来源: https://blog.csdn.net/qq_34556414/article/details/121928310

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有