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

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 类型也没法直接转换成数值类型

相关文章:

  • MATLAB实战:Arduino硬件交互项目方案
  • Codeforces Round 1028 (Div. 2)A题
  • 鸿蒙OSUniApp离线优先数据同步实战:打造无缝衔接的鸿蒙应用体验#三方框架 #Uniapp
  • LeetCode 131.分割回文串:回溯法与回文子串判定的结合
  • MySQ-8.42 MGR 组复制部署及详解
  • 【华为云Astro】从OBS CSV文件获取配置指南
  • uni-app学习笔记十七-css和scss的使用
  • ARINC818编解码设计FPGA实现
  • AR/MR实时光照阴影开发教程
  • mybatis02
  • CSS篇-6
  • pycharm打印时不换行,方便对比观察
  • 多线程( Thread)
  • 【深度学习】 19. 生成模型:Diffusion Models
  • 81、使用DTU控制水下灯光控制
  • ZLG ZCANPro,ECU刷新,bug分享
  • 刚出炉热乎的。UniApp X 封装 uni.request
  • 鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp
  • 一键净化Excel数据:高性能Python脚本实现多核并行清理
  • uni-app学习笔记二十--pages.json页面路由pages设置
  • 当当网网站建设/购买友情链接网站
  • 小型企业软件管理系统/张掖seo
  • 企业网站如何制作/合肥网站建设程序
  • 网站html优化/免费的外贸b2b网站
  • 莱芜百姓网/seo从零开始到精通200讲解
  • 长春网站建设论坛/鸣蝉智能建站