美文网首页
Go语言基础06-类型判断和类型转换

Go语言基础06-类型判断和类型转换

作者: isAlucard | 来源:发表于2019-01-31 10:58 被阅读0次
    Type

    自定义类型

    使用 type 关键字来定义类型。格式为 type name <Type>

    // 使用type自定义枚举类型
    
     // 自定义了新类型State,实质是 int
    type State int 
    
    // 定义枚举常量
    const (
    Pending   State = 0
    Success   State = 1
    Failed    State = 2
    Deleted   State = 3
    )
    
    // 状态判断
    func checkState(s State) {
      switch s {
      case Pending: 
        fmt.Println("Pending")
      case Success: 
        fmt.Println("Success")
      case Failed: 
        fmt.Println("Failed")
      case Deleted: 
        fmt.Println("Deleted")
      default:
        fmt.Println("Error Type")
      }
    }
    

    一般的类型转换

    在已知需要转换的类型和目标类型下,可以使用 newValue := Type(oldValue)

    var a int32 = 333
    b := int64(a)
    

    当然,对于一些已知类型的复杂一些的转换,可以使用相应包里的方法进行转换。

    类型断言和类型转换

    如何不知道需要转换的oldValue的值,那怎么办呢。
    比如你从一个API接口接收到了一个值,但是其定义的是interface{},现在你需要对这个值进行操作,但是因为类型不确定,就没有办法用相应类型的一些方法了。

    这时候就可以用类型断言和转换了。
    value.(type) 会对interface{}值的value作一个判断,返回一个确定的类型。
    v, ok := value.(Type),Type 是具体的类型,会将value转换成Type类型存储到v中,ok是表示转换是否成功的布尔值。

    一般是配合switch语句进行操作。

    switch v.(type) {
    case bool:
      v, ok = v.(bool)
      if !ok {
        fmt.Println("类型转换失败")
      }
    case int:
      v, ok = v.(int)
      // deal with ok
    case string:
      v, ok = v.(string)
      // deal with ok
    default:
      xxx
    }
    

    相关文章

      网友评论

          本文标题:Go语言基础06-类型判断和类型转换

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