当前位置: 首页 > article >正文

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.lryc.cn/news/2395512.html

相关文章:

  • 35、请求处理-【源码分析】-自定义参数绑定原理
  • 智绅科技——科技赋能健康养老,构建智慧晚年新生态
  • STM32通过KEIL pack包轻松移植LVGL,并学会使用GUI guider
  • day43 python Grad-CAM
  • 在 Ubuntu 上挂载其他硬盘的步骤
  • SQL的查询优化
  • MCU如何从向量表到中断服务
  • 物联网基础概念
  • Linux线程同步实战:多线程程序的同步与调度
  • 【MySQL】事务及隔离性
  • Leetcode 3566. Partition Array into Two Equal Product Subsets
  • yolo目标检测助手:具有模型预测、图像标注功能
  • 传统数据表设计与Prompt驱动设计的范式对比:以NBA投篮数据表为例
  • 2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)解题报告 | 科学家
  • WIN11 Docker Desktop 安装问题解决
  • 网站服务器出现异常的原因是什么?
  • Python实例题:Python3实现图片转彩色字符
  • 同一机器下通过HTTP域名访问其他服务器进程返回504问题记录
  • 基于物联网(IoT)的电动汽车(EVs)智能诊断
  • JDBC+HTML+AJAX实现登陆和单表的CRUD
  • Leetcode 3568. Minimum Moves to Clean the Classroom
  • Kafka多线程Consumer
  • 从零开始的git学习
  • 【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)
  • Spring Boot 整合 JdbcTemplate,JdbcTemplate 与 MyBatis 的区别
  • sass基础语法
  • 【EF Core】 EF Core 批量操作的进化之路——从传统变更跟踪到无跟踪更新
  • [Go] Option选项设计模式 — — 编程方式基础入门
  • Vue 项目命名规范指南
  • 【笔记】开源通用人工智能代理 Suna 部署全流程准备清单(Windows 系统)