Go语言中的数据类型转换

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

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

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

Go 复制代码
package main
import "fmt"

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

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

Go 复制代码
package main
import "fmt"

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

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

Go 复制代码
package main
import "fmt"

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

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

Go 复制代码
package main
func main() {
    var a int16 = 129
    var b = int8(a) // 范围 -128 到 127
    println("b=", b) 
    // b= -127
}

比如:计算直角三角形的斜边长时使用 math 包的 Sqrt()函数,该函数接收的是 float64 类型的 参数,而变量 a 和 b 都是 int 类型的,这个时候就需要将 a 和 b 强制类型转换为 float64 类型。

Go 复制代码
package main
import "fmt"
import "math"
func main() {
    var a, b = 3, 4
    var 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 类型

Go 复制代码
package main
import ("fmt")
func main() {
    var i int = 20
    str1 := fmt.Sprintf("%d", i)
    fmt.Printf("值:%v 类型:%T\n", str1, str1)
    // 值:20 类型:string

    var f float64 = 12.456
    str2 := fmt.Sprintf("%.2f", f)
    fmt.Printf("值:%v 类型:%T\n", str2, str2)
    // 值:12.46 类型:string

    var t bool = true
    str3 := fmt.Sprintf("%t", t)
    fmt.Printf("值:%v 类型:%T\n", str3, str3)
    // 值:true 类型:string

    var 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类型

Go 复制代码
package main
import (
    "fmt"
    "strconv"
)

func main() {

    // 整型转成字符串
    // FormatInt()
    // 参数1:int64的数值
    // 参数2:传值int类型的进制
    var i int = 20
    str1 := 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或32
    var f float32 = 20.231313
    str2 := 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 类型转换成数值类型

javascript 复制代码
package main

import (
	"fmt"
	"strconv"
)

func main() {


	// 字符串类型转换成整型
	// ParseInt()
	// 参数1:string数据
	// 参数2:进制
	// 参数3:位数 16、32、64
	str1:= "123456"
	num1,_:= strconv.ParseInt(str1, 10, 64)
	fmt.Printf("%v--%T\n", num1, num1)
	// 123456--int64


	// 字符串类型转换成浮点型
	// ParseFloat()
	// 参数1:string数据
	// 参数2:位数 32 64
	str2:= "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 类型也没法直接转换成数值类型。

相关推荐
予枫的编程笔记11 小时前
【MySQL筑基篇】从排名统计到非结构化存储:MySQL窗口函数与JSON实战教程
mysql·数据处理·窗口函数·后端开发·json数据类型·数据库进阶·mysql高级特性
啊汉1 天前
古文观芷App搜索方案深度解析:打造极致性能的古文搜索引擎
go·软件随想
像少年啦飞驰点、1 天前
零基础入门 Spring Boot:从“Hello World”到可部署微服务的完整学习路径
java·spring boot·微服务·编程入门·后端开发
asaotomo2 天前
一款 AI 驱动的新一代安全运维代理 —— DeepSentry(深哨)
运维·人工智能·安全·ai·go
像少年啦飞驰点、2 天前
零基础入门 Spring Boot:从“Hello World”到可上线的 Web 应用全闭环指南
java·spring boot·web开发·编程入门·后端开发
码界奇点2 天前
基于Gin与GORM的若依后台管理系统设计与实现
论文阅读·go·毕业设计·gin·源代码管理
迷迭香与樱花2 天前
Gin 框架
go·gin
只是懒得想了3 天前
用Go通道实现并发安全队列:从基础到最佳实践
开发语言·数据库·golang·go·并发安全
REDcker3 天前
计算机系统常用端口列表
计算机网络·udp·互联网·tcp·端口·后端开发
fenglllle3 天前
使用fyne做一个桌面ipv4网段计算程序
开发语言·go