类型断言

类型断言 提供了访问接口值底层具体值的方式。

  1. t := i.(T)

该语句断言接口值 i 保存了具体类型 T,并将其底层类型为 T 的值赋予变量 t

i 并未保存 T 类型的值,该语句就会触发一个恐慌。

为了 判断 一个接口值是否保存了一个特定的类型,类型断言可返回两个值:其底层值以及一个报告断言是否成功的布尔值。

  1. t, ok := i.(T)

i 保存了一个 T,那么 t 将会是其底层值,而 oktrue

否则,ok 将为 falset 将为 T 类型的零值,程序并不会产生恐慌。

请注意这种语法和读取一个映射时的相同之处。

type-assertions.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. var i interface{} = "hello"
  5. s := i.(string)
  6. fmt.Println(s)
  7. s, ok := i.(string)
  8. fmt.Println(s, ok)
  9. f, ok := i.(float64)
  10. fmt.Println(f, ok)
  11. f = i.(float64) // 报错(panic)
  12. fmt.Println(f)
  13. }