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

相关推荐
源代码•宸1 天前
Leetcode—1929. 数组串联&&Q1. 数组串联【简单】
经验分享·后端·算法·leetcode·go
nil1 天前
记录protoc生成代码将optional改成omitepty问题
后端·go·protobuf
Way2top1 天前
Go语言动手写Web框架 - Gee第五天 中间件
后端·go
Way2top1 天前
Go语言动手写Web框架 - Gee第四天 分组控制
后端·go
悟空码字1 天前
SpringBoot整合Zookeeper,实现分布式集群部署
java·zookeeper·springboot·编程技术·后端开发
Grassto1 天前
从 `go build` 开始:Go 第三方包加载流程源码导读
golang·go·go module
源代码•宸2 天前
Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)
开发语言·经验分享·后端·算法·golang·go
華勳全栈3 天前
两天开发完成智能体平台
java·spring·go
REDcker3 天前
iperf3 服务器测速服务搭建指南
运维·服务器·后端·后端开发·iperf·iperf3·测速