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

相关推荐
程序员爱钓鱼44 分钟前
Go语言中的反射机制 — 元编程技巧与注意事项
前端·后端·go
Code季风2 小时前
深入比较 Gin 与 Beego:Go Web 框架的两大选择
开发语言·golang·go·gin·beego
Code季风3 小时前
Gin 中间件详解与实践
学习·中间件·golang·go·gin
风飘百里16 小时前
Go CGo 权威指南:从『链接地狱』到『部署天堂』
go
nlog3n16 小时前
基于 govaluate 的监控系统中,如何设计灵活可扩展的自定义表达式函数体系
算法·go
真夜17 小时前
go开发个人博客项目遇到的问题记录
后端·go
叹一曲当时只道是寻常19 小时前
Softhub软件下载站实战开发(十):实现图片视频上传下载接口
golang·go·音视频
Wo3Shi4七19 小时前
双向队列
数据结构·算法·go
Wo3Shi4七19 小时前
列表
数据结构·算法·go
Wo3Shi4七19 小时前
链表
数据结构·算法·go