Go 是一种强类型的语言,所以如果在赋值的时候两边类型不一致会报错。一个类型的值可以被转换成另一种类型的值。由于 Go 语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明。
强制类型转换语法
使用 type (a)
这种形式来进行强制类型转换,比如:
var a int32 = 10
var b int64 = int64(a)
通过在变量前面添加指定类型,就可以进行强制类型转换。
注意事项
高位转低位的时候,需要注意,会存在精度丢失。比如上述 16 转 8 位的时候,就丢失了:
var n1 int16 = 130
fmt.Println(int8(n1)) // 变成 -126
其他常用类型转换
string 转成 int
int, err := strconv.Atoi(string)
int 转成 string
string := strconv.Itoa(int)
string 转成 int64
int64, err := strconv.ParseInt(string, 10, 64)
int64 转成 string
string := strconv.FormatInt(int64, 10)
float 转 string
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
比如:
package main
import (
"fmt"
"strconv"
)
func main() {
num := 250.56
str := strconv.FormatFloat(num, 'f', 4, 64)
fmt.Printf("type:%T value:%#v\n", str, str)
}
输出:
type:string value:"250.5600"
类型转换的规则
类型转换只能在定义正确的情况下转换成功,例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将 int16
转换为 int32
)。
当从一个取值范围较大的类型转换到取值范围较小的类型时(将 int32
转换为 int16
或将 float32
转换为 int
),会发生精度丢失(截断)的情况。浮点数在转换为整型时,会将小数部分去掉,只保留整数部分。