Go语言中的数据类型转换

Go 语言中只有强制类型转换,没有隐式类型转换。

1. 数值类型之间的相互转换

1.1. 整型和整型之间的转换

package main
import "fmt"func main() {var a int8 = 20var b int16 = 40fmt.Println(int16(a) + b)// 60
}

1.2. 浮点型和浮点型之间的转换

package main
import "fmt"func main() {var a float32 = 20var b float64 = 40fmt.Println(float64(a) + b)// 60
}

1.3. 整型和浮点型之间的转换

package main
import "fmt"func main() {var a float32 = 20.23var b int = 40fmt.Println(a + float32(b))// 60.23
}

注意:转换的时候建议从低位转换成高位,高位转换成低位的时候如果转换不成功就会溢出,和我们想的结果不一样。

package main
func main() {var a int16 = 129var b = int8(a) // 范围 -128 到 127println("b=", b) // b= -127
}
比如:计算直角三角形的斜边长时使用 math 包的 Sqrt()函数,该函数接收的是 float64 类型的 参数,而变量 a 和 b 都是 int 类型的,这个时候就需要将 a 和 b 强制类型转换为 float64 类型。
package main
import "fmt"
import "math"
func main() {var a, b = 3, 4var c int// math.Sqrt()接收的参数是 float64 类型,需要强制转换c = int(math.Sqrt(float64(a*a + b*b)))fmt.Println(c)// 5
}


2. 其他类型转换成 string 类型

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

package main
import ("fmt")
func main() {var i int = 20str1 := fmt.Sprintf("%d", i)fmt.Printf("值:%v 类型:%T\n", str1, str1)// 值:20 类型:stringvar f float64 = 12.456str2 := fmt.Sprintf("%.2f", f)fmt.Printf("值:%v 类型:%T\n", str2, str2)// 值:12.46 类型:stringvar t bool = truestr3 := fmt.Sprintf("%t", t)fmt.Printf("值:%v 类型:%T\n", str3, str3)// 值:true 类型:stringvar b byte = 'a'str4 := fmt.Sprintf("%c", b)fmt.Printf("值:%v 类型:%T\n", str4, str4)// 值:a 类型:string}

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

2.2. 通过strconv 把其他类型转换成string类型

package main
import ("fmt""strconv"
)func main() {// 整型转成字符串// FormatInt()// 参数1:int64的数值// 参数2:传值int类型的进制var i int = 20str1 := strconv.FormatInt(int64(i), 10)fmt.Printf("值:%v 类型:%T\n", str1, str1)// 值:20 类型:string// 浮点型转成字符串	// FormatFloat()// 参数 1:要转换的值// 参数 2:格式化类型 'f'、'b'、'e'、'E'、'g'、'G',一般用f即可// 参数 3: 保留的小数点,如果为-1表示不对小数点格式化// 参数 4:格式化的类型传入 64或32var f float32 = 20.231313str2 := strconv.FormatFloat(float64(f), 'f', 4, 32)fmt.Printf("值:%v 类型:%T\n", str2, str2)// 值:20.2313 类型:string// 布尔型转成字符串,没有任何意义str3 := strconv.FormatBool(true)fmt.Printf("值:%v 类型:%T\n", str3, str3)// 值:true 类型:string // 字符转成字符串,没有任何意义a:='b' str4 := strconv.FormatUint(uint64(a), 10)fmt.Printf("值:%v 类型:%T\n", str4, str4) //值:98 类型:string}

3. String 类型转换成数值类型

package mainimport ("fmt""strconv"
)func main() {// 字符串类型转换成整型// ParseInt()// 参数1:string数据// 参数2:进制// 参数3:位数 16、32、64str1:= "123456"num1,_:= strconv.ParseInt(str1, 10, 64)fmt.Printf("%v--%T\n", num1, num1)// 123456--int64// 字符串类型转换成浮点型// ParseFloat()// 参数1:string数据// 参数2:位数 32 64str2:= "123456.333xxxx"float2,_:= strconv.ParseFloat(str2, 64)fmt.Printf("%v--%T\n", float2, float2)// 0--float64// 字符串类型转换成布尔型=>不建议这样转bool3, _ := strconv.ParseBool("xxxxxxx") fmt.Printf("值:%v 类型:%T\n", bool3, bool3)// 值:false 类型:bool}

4. 数值类型没法和 bool 类型进行转换

注意:在 go 语言中数值类型没法直接转换成 bool 类型,bool 类型也没法直接转换成数值类型

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

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

相关文章

行为型:中介者模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的:通过引入一个中介对象来封装一组对象之间的交互,解决对象间过度耦合、频繁交互的问题。不管是对象引用维护还是消息的转发&am…

node_modules\node-sass: Command failed.报错了

node_modules\node-sass: Command failed.错误解决 第一步:删掉:目录中划红线的配置文件 删掉项目中的node_modules第二步:用admin权限执行,重新配置npm和yarn npm config set registry https://registry.npm.taobao.org --global npm con…

STM32 ADC工作原理与配置详解

文章目录 ADCADC简介逐次逼近型ADCADC框图ADC框图的工作流程(以规则组为例)1. 输入通道选择与信号接入2. 触发转换:软件或硬件触发3. 采样保持与量化编码4. 转换结果处理与存储5. 状态标志与中断6. 参考电压与时钟驱动7. 辅助功能&#xff1a…

1、Pytorch介绍与安装

1、Pytorch介绍 PyTorch 是由 Facebook AI Research (FAIR) 团队开发并维护的一款开源深度学习框架,于 2016 年首次发布。它因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究…

RedisTemplate查询不到redis中的数据问题(序列化)

RedisTemplate查询不到redis中的数据问题(序列化) 一.问题描述 存入Redis中的值取出来却为null,问题根本原因就是RedisTemplate和StringRedisTemplate的序列化问题、代码示例: SpringBootTest class Redis02SpringbootApplicationTests {Autowiredprivate RedisTe…

【Net】TCP粘包与半包

文章目录 TCP粘包与半包1 背景2 粘包(packet stick)3 半包(packet split)4 为什么会出现粘包/半包?5 如何解决?6 示例7 总结 TCP粘包与半包 在网络编程中,粘包和半包问题是常见的 TCP 协议特有…

Leetcode 3566. Partition Array into Two Equal Product Subsets

Leetcode 3566. Partition Array into Two Equal Product Subsets 1. 解题思路2. 代码实现 题目链接:3566. Partition Array into Two Equal Product Subsets 1. 解题思路 这一题我的实现还是比较暴力的,首先显而易见的,若要满足题目要求&…

QT中更新或添加组件时出现“”qt操作至少需要一个处于启用状态的有效资料档案库“解决方法”

在MaintenanceTool.exe中点击下一步 第一个: 第二个: 第三个: 以上任意一个放入资料库中

52. N-Queens II

题目描述 52. N-Queens II 回溯法 这道题与第51题是一样的。51. N-Queens-CSDN博客 class Solution {int columns; //从低位到高位起算,第i位为0表示棋盘第i列可以放置皇后,第i位为1表示棋盘第i列不能放置皇后//边长为n的棋盘分别有2n-1条正斜线和反…

解锁AI智能Agent的“风格基因”

从“黑箱”到“智能Agent”:LangChain的架构哲学革新 在LangChain出现之前,开发者直接调用LLM API的方式,充满了“黑箱”操作的挑战: 紧耦合的业务逻辑与模型调用: 所有的业务逻辑、API调用、记忆管理、错误处理等都可能混杂在同一个代码块中。这导致代码脆弱、难以测试,…

大数据运维过程中常见的一些操作

大数据运维是确保大数据系统稳定运行、高效处理数据的关键环节。以下是大数据运维过程中常见的一些操作和任务: 1. 集群部署与配置 基础设施搭建:部署服务器、网络设备、存储系统,配置虚拟化环境(如 Docker、Kubernetes)。分布式系统安装:安装 Hadoop、Spark、Hive、Kaf…

STM32中,如何理解看门狗

在STM32微控制器中,看门狗(Watchdog)是一种硬件计时器,用于监控系统运行状态,防止软件死锁或跑飞。其核心机制是:系统需定期“喂狗”(复位看门狗计数器),若未及时喂狗&am…

[AI算法] LLM中的gradient checkpoint机制

文章目录 什么是gradient checkpoint原理使用场景 注意事项 什么是gradient checkpoint gradient checkpoint是一种优化深度学习模型内存使用的技术,尤其在训练大型模型时非常有用。它通过牺牲计算时间为代价来减少显存占用。大多数情况下,transformers…

船舶二阶非线性响应方程的EKF与UKF参数辨识

船舶二阶非线性响应方程的EKF与UKF参数辨识 本文将详细阐述使用Python实现扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)对船舶二阶非线性响应方程进行参数辨识的过程。全文包含理论推导、算法实现、仿真验证及结果分析。—### 1. 船舶二阶非线性响应方程建模船舶运动可表示为&am…

【ARM AMBA APB 入门 1.1 -- APB 读写寄存器 RTL 实现】

请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 APB 寄存器访问APB 读寄存器 RTL 代码实现APB 写寄存器 RTL 代码实现 APB 寄存器访问 APB 读寄存器 RTL 代码实现 APB 总线读寄存器操作代码实现: wire [31:0] SOC_PLL_CFG_REG; wire [31:0] SOC_PLL_LOCK_REG; wi…

C++修炼:位图和布隆过滤器

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 1、引言 在计算机科学…

Java大厂后端技术栈故障排查实战:Spring Boot、Redis、Kafka、JVM典型问题与解决方案

Java大厂后端技术栈故障排查实战&#xff1a;Spring Boot、Redis、Kafka、JVM典型问题与解决方案 引言 在互联网大厂&#xff0c;Java后端系统往往承载着高并发、高可用和复杂业务需求。系统架构日益复杂&#xff0c;涵盖微服务、缓存、消息队列、数据库等多种组件&#xff0…

交叉编译tcpdump工具

1.导出交叉编译工具链 export PATH$PATH:/opt/rockchip/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin 下载源码包libpcap-1.10.5&#xff0c;配置、并编译安装。 github仓库地址 ./configure --hostarm-linux CCarm-linux-gnueabihf-gcc --prefix$PWD/install …

Pytest Fixture 是什么?

Fixture 是什么&#xff1f; Fixture 是 Pytest 测试框架的核心功能之一&#xff0c;用于为测试函数提供所需的依赖资源或环境。它的核心目标是&#xff1a; ✅ 提供测试数据&#xff08;如模拟对象、数据库记录&#xff09; ✅ 初始化系统状态&#xff08;如配置、临时文件&a…

【深度剖析】流处理系统性能优化:解决维表JOIN、数据倾斜与数据膨胀问题

目录 前言:为什么你的流处理作业总是慢? 一、维表JOIN优化:从普通连接到高性能查询 1.1 时态表的双面性 1.2 Lookup Join 优化 1.3 多表JOIN优化策略 二、数据倾斜:单分区也会遇到的隐形杀手 2.1 单分区数据倾斜 2.2 热点键打散技术 2.3 时间窗口预聚合 三、数据…