美文网首页
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