类型转换
类型转换用于将一种数据类型的变量转换为另外一种类型的变量。
Go 语言类型转换基本格式:
type_name(expression)
type_name 为类型,expression 为表达式。
Go 不支持隐式类型转换,比如 int64 不能直接赋值给 int32,必须显式转换 b = int32(a),否则编译报错
数值类型转换
将整型转换为浮点型,并计算结果:
package main
import "fmt"
func main() {
var sum int = 17
var count int = 5
var mean float32
// int 转 float32,否则整数相除结果为3而不是3.4
mean = float32(sum) / float32(count)
fmt.Printf("mean 的值为: %f\n", mean)
}
输出:
mean 的值为: 3.400000
int转float
a := 10
b := float64(a)
fmt.Printf("a的类型是%T, b的类型是%T", a, b)
float转int
var a float32 = 23.3
b := int(a) // 小数部分被直接截断丢弃,不会四舍五入
fmt.Printf("b的值为%v, b的类型%T", b, b)
字符串与数值互转 strconv
strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,可以用空白标识符 _ 忽略这个错误。
字符串转整数
package main
import (
"fmt"
"strconv"
)
func main() {
str := "123"
num, err := strconv.Atoi(str)
if err != nil {
fmt.Println("转换错误:", err)
} else {
fmt.Printf("字符串 '%s' 转换为整数为:%d\n", str, num)
}
}
整数转字符串
package main
import (
"fmt"
"strconv"
)
func main() {
num := 123
str := strconv.Itoa(num)
fmt.Printf("整数 %d 转换为字符串为:'%s'\n", num, str)
}
字符串转浮点数
package main
import (
"fmt"
"strconv"
)
func main() {
str := "3.14"
num, err := strconv.ParseFloat(str, 64) // 64 表示 float64
if err != nil {
fmt.Println("转换错误:", err)
} else {
fmt.Printf("字符串 '%s' 转为浮点型为:%f\n", str, num)
}
}
浮点数转字符串
package main
import (
"fmt"
"strconv"
)
func main() {
num := 3.14
str := strconv.FormatFloat(num, 'f', 2, 64) // 'f'格式,保留2位小数,float64
fmt.Printf("浮点数 %f 转为字符串为:'%s'\n", num, str)
}
strconv 常用函数速查
| 函数 | 作用 | 示例 |
|---|---|---|
| strconv.Atoi(str) | 字符串转 int,返回(int, error) | n, err := strconv.Atoi("123") |
| strconv.Itoa(num) | int 转字符串 | s := strconv.Itoa(123) |
| strconv.ParseFloat(str, 64) | 字符串转 float,返回(float64, error) | f, err := strconv.ParseFloat("3.14", 64) |
| strconv.FormatFloat(num, 'f', 2, 64) | float 转字符串 | s := strconv.FormatFloat(3.14, 'f', 2, 64) |
类型转换示例汇总
package main
import (
"fmt"
"strconv"
)
func main() {
// int 转 float64
a := 10
b := float64(a)
fmt.Printf("a:%T %d,b:%T %f\n", a, a, b, b)
// float 转 int,截断小数
var c float32 = 23.3
d := int(c)
fmt.Printf("c:%T %f,d:%T %d\n", c, c, d, d)
// string 转 int
aStr := "100"
bInt, err := strconv.Atoi(aStr)
if err == nil {
fmt.Printf("aStr:%T %s,bInt:%T %d\n", aStr, aStr, bInt, bInt)
} else {
fmt.Printf("err:%s\n", err)
}
// int 转 string
cInt := 200
dStr := strconv.Itoa(cInt)
fmt.Printf("cInt:%T %d,dStr:%T %s\n", cInt, cInt, dStr, dStr)
}