go语言数据类型转换

go语言数据类型转换

golang不会对数据进行隐式的类型转换,只能手动去执行转换操作,表达式T(v)将值v转换为类型T
T : 就是数据类型
V : 就是需要转换的变量

一、数值类型转换

数值间转换的时候建议从小范围转换成大范围,比如int8转int16,大范围转换成小范围的时候,比如int16转int8,会发生精度丢失(截断)的情况,如果转换不成功就会溢出。

1.1、整数间转换
package main
import "fmt"
func main() {var a int8 = 6var b int16 = 12var c = b + 5 //根据b推导出c也是int16fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)c = int16(a) + bfmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
}//整数间的数值运算,值:17 ----类型int16//整数间的数值运算,值:18 ----类型int16
1.2、浮点数间转换
package main
import "fmt"
func main() {var a float32 = 6.1fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", a, a)//整数间的数值运算,值:6.1 ----类型float32fmt.Printf("整数间的数值运算,值:%.1f ----类型%T\n", a, a)//整数间的数值运算,值:6.1 ----类型float32var d float64 = float64(a)fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", d, d)//整数间的数值运算,值:6.099999904632568 ----类型float64var b float64 = 12.1var c = float64(a) + bfmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)//整数间的数值运算,值:18.19999990463257 ----类型float64
}
1.3、整数与浮点类型间的转换
func main() {var a int = 8var b float64 = 12.1var c = float64(a) + bfmt.Printf("整数和浮点数直接的运算,值:%v ----类型%T\n", c, c)
}

二、其他类型转换成String类型

2.1 fmt.Sprintf()把其他类型转换成String类型

注意:fmt.Sprintf()使用中需要注意转换的格式,int 为%d, float 为%f, bool为%t, byte 为%c

注意:fmt.Sprintf()使用中需要注意转换的格式,int 为%d, float 为%f, bool为%t, byte 为%c

package main
import "fmt"
func main() {var (a int     = 20b float64 = 12.456c bool    = trued byte    = 'a')var strA, strB, strC, strD stringstrA = fmt.Sprintf("%d", a)strB = fmt.Sprintf("%f", b)strC = fmt.Sprintf("%t", c)strD = fmt.Sprintf("%c", d)fmt.Printf("stra类型是%T,值是%v\n", strA, strA)fmt.Printf("strb类型是%T,值是%v\n", strB, strB)fmt.Printf("strc类型是%T,值是%v\n", strC, strC)fmt.Printf("strd类型是%T,值是%v\n", strD, strD)
}
/*stra类型是string,值是20
strb类型是string,值是12.456000
strc类型是string,值是true
strd类型是string,值是a
*/
// 变量命名方式也是两种
2.2、使用strconv包把其他类型转换成String类型
2.2.1、int 转换成 String 类型
func main() {var (a    int64 = 20strA stringb    int = 19)strA = strconv.FormatInt(a, 10)   //方法1fmt.Printf("类型%T,数值%v\n", strA, strA)strA = strconv.Itoa(b)  //方法2fmt.Printf("类型%T,数值%v\n", strA, strA)
}
//strconv.Itoa()等价于strconv.FormatInt()
2.2.2、float 转换成 String 类型
strconv.FormatFloat(f float64, fmt byte, prec, bitSize int)
参数1是要转换的值,需要时float64类型
参数2是格式化的进制类型'f' (-ddd.dddd)'b' (-ddddp±ddd,指数为二进制)'e'-d.dddde±dd,十进制指数)、'E'-d.ddddE±dd,十进制指数)、'g' (指数很大时用'e'格式,否则'f'格式)'G' (指数很大时用'E'格式,否则'f'格式)
参数3是保留的小数点数量,设置为 -1 表示不对小数点格式化 ,设置为 3 表示保留三位小数。
参数4是格式化后的类型为int,位数是设置的bitSize,设置64,那就是格式化后的具体类型为int64func main() {var a float64 = 20.123456star01 := strconv.FormatFloat(a, 'f', -1, 64)fmt.Printf("类型%T,数值%v\n", star01, star01)//类型string,数值20.123456star02 := strconv.FormatFloat(a, 'f', 3, 64)fmt.Printf("类型%T,数值%v\n", star02, star02)//类型string,数值20.123
}
2.2.3、bool 转 String类型
func main() {var a bool = truestr := strconv.FormatBool(a)fmt.Printf("类型%T,数值%v\n", str, str)//类型string,数值truevar b bool = falsestr01 := strconv.FormatBool(b)fmt.Printf("类型%T,数值%v\n", str01, str01)//类型string,数值false
}

三、String类型转换成数值类型

Parse类函数用于转换字符串为给定类型的值:ParseBool()ParseFloat()ParseInt()ParseUint()。由于字符串转换为其它类型可能会失败,所以这些函数都有两个返回值,第一个返回值保存 转换后的值,第二个返回值判断是否转换成功。

3.1、String类型转换成int类型
func main() {a := "12"num, _ := strconv.ParseInt(a, 10, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)a = "hello"num, _ = strconv.ParseInt(a, 10, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)a = "12.1"num, _ = strconv.ParseInt(a, 10, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)a = "-12"num, _ = strconv.ParseInt(a, 10, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)a = "12"num, _ = strconv.ParseInt(a, 10, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)num01, _ := strconv.ParseUint(a, 10, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num01, num01)a = "-12"num02, _ := strconv.Atoi(a)fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)a = "12"num02, _ = strconv.Atoi(a)fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)a = "hello"num02, _ = strconv.Atoi(a)fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
}/*变量hello,类型int64,数值0
变量12.1,类型int64,数值0
变量-12,类型int64,数值-12
变量12,类型int64,数值12
变量12,类型uint64,数值12
变量-12,类型int,数值-12
变量12,类型int,数值12
变量hello,类型int,数值0
*///非数字字符串不可以转换为int类型,浮点字符串也不可以转换为int类型
//ParseInt()可以转换正数和负数,ParseUint()只能转换正数
//strconv.Atoi() 等价于ParseInt()
3.2、String类型转换成float类型
func main() {a := "12.123456"num, _ := strconv.ParseFloat(a, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)a = "12"num, _ = strconv.ParseFloat(a, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)a = "hello"num, _ = strconv.ParseFloat(a, 64)fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
}/*变量12.123456,类型float64,数值12.123456
变量12,类型float64,数值12
变量hello,类型float64,数值0*/
//非数字字符串不可以转换为float类型
3.3、String类型转换成bool类型
func main() {s := "true"num, _ := strconv.ParseBool(s)fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)s = "false"num, _ = strconv.ParseBool(s)fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)s = "hello"num, _ = strconv.ParseBool(s)fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)s = "1"num, _ = strconv.ParseBool(s)fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)s = "0"num, _ = strconv.ParseBool(s)fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
}/*变量true,类型bool,数值true
变量false,类型bool,数值false
变量hello,类型bool,数值false
变量1,类型bool,数值true
变量0,类型bool,数值false*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习网络安全 你必须要学会的20款工具

工欲善其事必先利其器,在新入门网络安全的小伙伴而言。这些工具你必须要有所了解。本文我们简单说说这些网络安全工具吧! Web安全类 Web类工具主要是通过各种扫描工具,发现web站点存在的各种漏洞如sql注入、xss等。从而获取系统权限&#xf…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc:https://maven.proxy.ustclug.org/maven2/o…

stamps做sbas-insar,时序沉降图怎么画?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

【人工智能Ⅱ】实验5:自然语言处理实践(情感分类)

实验5:自然语言处理实践(情感分类) 一:实验目的与要求 1:掌握RNN、LSTM、GRU的原理。 2:学习用RNN、LSTM、GRU网络建立训练模型,并对模型进行评估。 3:学习用RNN、LSTM、GRU网络做…

AST原理(反混淆)

一、AST原理 jscode var a "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";在上述代码中,a 是一个变量,它被赋值为一个由 Unicode 转义序列组成的字符串。Unicode 转义序列在 JavaScript 中以 \u 开头,后跟四个十六进…

Python学习笔记------json

json简介 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互 为了让不同的语言能够相互通…

《LTC与铁三角∶从线索到回款-人民邮电》关于铁三角不错的论述

《LTC与铁三角∶从线索到回款-人民邮电》一书中,关于铁三角不错的论述,收藏之:客户责任人的角色定义及核心价值 AR 的核心价值定位主要体现在三个方面:客户关系、 客户满意度、竞争对手 “ 压制 ” 。 维护客户关系&#x…

百川2模型解读

简介 Baichuan 2是多语言大模型,目前开源了70亿和130亿参数规模的模型。在公开基准如MMLU、CMMLU、GSM8K和HumanEval上的评测,Baichuan 2达到或超过了其他同类开源模型,并在医学和法律等垂直领域表现优异。此外,官方还发布所有预…

[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)

文章涉及具体代码gitee: 登录 - Gitee.com 目录 1.插入排序 1.直接插入排序 总结 2.希尔排序 总结 2.选择排序 1.选择排序 ​编辑 总结 2.堆排序 总结 3.交换排序 1.冒泡排序 总结 2.快速排序 总结 4.归并排序 总结 5.总的分析总结 1.插入排…

Unity---版本控制软件

13.3 版本控制——Git-1_哔哩哔哩_bilibili Git用的比较多 Git 常用Linux命令 pwd:显示当前所在路径 ls:显示当前路径下的所有文件 tab键自动补全 cd:切换路径 mkdir:在当前路径下创建一个文件夹 clear:清屏 vim…

Linux的socket详解

一、本机直接的进程通信方式 管道(Pipes): 匿名管道(Anonymous pipes):通常用于父子进程间的通信,它是单向的。命名管道(Named pipes,也称FIFO):允…

微星主板安装双系统不能进入Ubuntu的解决办法

在微星主板的台式机上面依次安装了Windows11和Ubuntu22.04。在Ubuntu安装完成后重启,没有出现系统选择界面,直接进入了Windows11。怎么解决?方法如下: (1)正常安装Windows11 (2)安…

《自动机理论、语言和计算导论》阅读笔记:p352-P401

《自动机理论、语言和计算导论》学习第 12 天,p352-P401总结,总计 50 页。 一、技术总结 1.Turing Machine ™ 2.undecidability ​ a.Ld(the diagonalization language) 3.reduction p392, In general, if we have an algorithm to convert insta…

Git系列:config 配置

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Java中的枚举类型介绍

一、背景及定义 情景: 枚举是在JDK1.5以后引入的。 主要用途是: 将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式: 这种定义方式实际上并不好。 例如:如果碰巧有另一个变量也是1,那么…

笔记85:如何计算递归算法的“时间复杂度”和空间复杂度?

先上公式: 递归算法的时间复杂度 递归次数 x 每次递归消耗的时间颗粒数递归算法的空间复杂度 递归深度 x 每次递归消耗的内存空间大小 注意: 时间复杂度指的是在执行这一段程序的时候,所花费的全部的时间,即时间的总和而空间复…

以太网基础-IP、ICMP、ARP协议

一、IP协议 参考:rfc791.txt.pdf (rfc-editor.org) IP协议(Internet Protocol)是TCP/IP协议族中最核心的协议,提供不可靠的、无连接的、尽力而为的数据报传输服务。 IP报文数据头如下 Version:4bit,4表示…

网络模型与调试

网络模型 网络的体系结构 ● 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 ● 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供…

Elasticsearch:如何使用 Java 对索引进行 ES|QL 的查询

在我之前的文章 “Elasticsearch:对 Java 对象的 ES|QL 查询”,我详细介绍了如何使用 Java 来对 ES|QL 进行查询。对于不是很熟悉 Elasticsearch 的开发者来说,那篇文章里的例子还是不能单独来进行运行。在今天的这篇文章中,我来详…

MySQL CRUD进阶

前言👀~ 上一章我们介绍了CRUD的一些基础操作,关于如何在表里进行增加记录、查询记录、修改记录以及删除记录的一些基础操作,今天我们学习CRUD(增删改查)进阶操作 如果各位对文章的内容感兴趣的话,请点点小…