美文网首页
golang中的五种类型转换

golang中的五种类型转换

作者: 深圳都这么冷 | 来源:发表于2023-01-04 14:12 被阅读0次

1. 无类型常量(隐式)

有些常量不从属某一具体类型,共六种:

编号 无类型常量 默认类型
1 无类型布尔 bool
2 无类型整数 int
3 无类型符文 rune
4 无类型浮点数 float64
5 无类型复数 complex128
6 无类型字符串 string

变量声明没有指定具体类型时,无类型常量会隐式转换成该变量的默认类型

i := 0  // int(0)
r := '\000' // rune('\000')
f := 0.0  // float64(0.0)
c := 0i  // complex128(0i)
var i8 int8 = 1  // int8(1)  无类型到具体类型的隐式转换,类型必须兼容

2. 显式类型转换

显式类型转换,基础类型必须兼容

i := int(1.2)

3. 类型断言

obj.(T),一般从接口类型转换为具体类型

x := obj.(T)  // T可以是任何具体类型或者接口类型,如果转换不成功会panic
x, ok := obj.(T) // x只有ok为true时才有意义

4. 具体类型赋值给接口类型(隐式)

  • 会暂时忘记具体类型的特征
  • 具体类型必须兼容接口定义
type I interface{}
var x I = 0

5. 方法定义的接收器

  • 如果方法定义接收器是*T,调用时是T,隐式将T x转换为*T &x
    此处转换需要保证x可取地址
  • 如果方法定义接收器是T,调用时是*T,隐式将*T p转换为T *p
  • 如果方法定义接收器的类型和调用时的类型一致,不做任何转换

相关文章

网友评论

      本文标题:golang中的五种类型转换

      本文链接:https://www.haomeiwen.com/subject/eaprcdtx.html