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

相关推荐
newerp17 小时前
Go net/http 标准库基础
后端·程序员·go
26519405112648017 小时前
01-整体架构与高可用
go
程序员爱钓鱼19 小时前
Go if 判断详解
前端·后端·go
名字还没想好☜1 天前
Go 的 unsafe.Pointer 实战:零拷贝 []byte↔string 转换与三条铁律
开发语言·后端·golang·go·unsafe
阿里云云原生1 天前
阿里云联合 Datadog,补齐 Go 可观测性最后短板
云原生·go
可观测性用观测云1 天前
零码改造!Go 语言应用上报观测云完整最佳实践
go
斐波那契数列2 天前
参考react 实现一个golang gui
go
程序员爱钓鱼2 天前
Go 运算符详解
后端·面试·go
angryshan2 天前
goLang配置断点流程
go·bug
AI大模型-小雄2 天前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex