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,一经查实,立即删除!

相关文章

深入理解Java泛型

Java泛型是在JDK 5中引入的一个强大的特性,它允许开发者在编译时提供类型安全的集合操作。泛型的本质是参数化类型,即在类或方法中使用一个或多个类型形参来定义,然后在创建类实例或调用方法时传入具体的类型参数。 泛型的基本使用 泛型的基…

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

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

C# 中 有两种常见的类型转换方式:显式转换和 as 运算符

在 C# 中,有两种常见的类型转换方式:显式转换和as 运算符。它们用于在不同类型之间进行转换。以下是对这两种转换方式的详细解释和示例说明: 显式转换:显式转换是通过使用转换操作符(如 (typeName)value)将…

Pytorch实现扩散模型【DDPM代码解读篇1】

本篇内容属于对DDPM 原理-代码 项目的解读。 具体内容参考一篇推文,里面对DDPM讲解相对细致: 扩散模型的原理及实现(Pytorch) 下面主要是对其中源码的细致注解,帮助有需要的朋友更好理解代码。 目录 ConvNext块 正…

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数据清理通用流程简述

一、简述 Python中数据清理是重要的环节,并通过解决缺失值、离群值、重复和不一致等常见问题以进行下一步的数据分析。 通常我们开始一个新的数据项目时,通因为各种各样的问题,通常获得的数据很少能直接上到模型里面去跑,所以要进行清理,清理数据是一个消除错误、异常值和…

centos 杀死一个进程又启动了

在CentOS中,如果一个进程被杀死后又自动启动,可能是由于系统服务管理器(如systemd或init)配置了该进程的重启。以下是检查和处理这种情况的方法: 查找启动脚本: 使用systemctl查找服务文件:syst…

flink mysql数据表同步API CDC

概述: CDC简介 Change Data Capture API CDC同步数据代码 package com.yclxiao.flinkcdcdemo.api;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ververica.cdc.connectors.mysql.source.MySqlSource; import com.verv…

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

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

【12575嵌入式系统】嵌入式系统考前复习题终结版期末复习自考复习

一、 填空题 1. 嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系 统 对 功 能 、 可 靠 性 、 成 本 、 体 积 、 功 耗 严 格 要 求 的 专 用 计 算 机 系统。 2. 请 列 举 2 个 嵌 入 式 实 时 操 作 系 统 &…

Python实战开发及案例分析(2)——单目标优化

在Python中,进行单目标优化主要涉及定义一个优化问题,包括一个目标函数和可能的约束条件,然后选择合适的算法来求解。Python提供了多种库,如SciPy、Pyomo、GEKKO等,用于处理各种优化问题。 案例分析:使用 …

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

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

zabbix之system.run

Zabbix的system.run是一个主动模式的监控项,它允许用户在Zabbix服务器上执行自定义的命令或脚本,并获取执行结果作为监控数据。 system.run监控项的配置包括以下几个关键参数: 命令:要执行的命令或脚本。可以是任何可执行的命令,包括系统命令、脚本文件等。 参数:命令的…

百川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.插入排…

Visual Studio 2022 工具 选项 没有网络设置问题解决

Visual Studio 2022 工具 选项 没有网络选项了,找了一大圈也没找到。 最后发现Visual Studio 2022的直接使用系统的代理设置了,在浏览器的代理中设置即可。 要使用扩展管理器安装插件,还不能设置pac !!! 顺便记录个pac地址: 1…

Unity---版本控制软件

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