跳到主要内容

类型转换

Go 的数值转换有哪些规则?​

  • 数值转换: 对有具体类型的数值使用 T(v);整数缩窄保留目标宽度内的位,浮点转整数丢弃小数部分,转换本身不是范围校验;

  • 隐式转换: Go 不做数值类型间隐式转换;

  • 窄类型转换: 可能截断数据;

func main() {
var a int = 10
var b int64 = int64(a) // 显式转换 int 为 int64
var c float64 = float64(a) // 显式转换 int 为 float64
println(b, c)
}
var wide int = 257
small := uint8(wide) // 1:只保留低 8 位
var decimal float64 = 3.9
whole := int(decimal) // 3:截去小数部分
println(small, whole)

string 与 []byte 如何转换? 转换会复制数据吗?​

  • string 不可变: 修改 byte slice 不会修改原字符串;
  • 转换复制: string 与 []byte 转换通常产生新存储;
func main() {
s := "go"
bs := []byte(s) // 复制字符串字节到 byte slice
bs[0] = 'G'
s2 := string(bs) // 复制 byte slice 到新字符串
println(s, s2) // go Go
}