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

2019-01-31  本文已影响0人  isAlucard
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
}
上一篇下一篇

猜你喜欢

热点阅读