Go语言编程基础 方法与接口(三)——类型断言、类型选择

12 类型断言

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

t := i.(T)

note:断言接口值i保存了具体类型T,并将底层类型为T的值赋予变量t。
note:若i并未保存T类型的值,该语句触发一个panic。

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

t, ok := i.(T)

note:如果i保存了一个T,那么t将会是其底层值,而ok为true。
note:否则,ok将为false,而t将为T类型的零值,程序并不会产生panic。

package main

import "fmt"

func main()  {
  var ii interface{} = "hhh"
  t := ii.(string)
  fmt.Println(t)

  sk, ok := ii.(string)
  fmt.Println(sk, ok)

  ik, ok := ii.(int)
  fmt.Println(ik, ok)
}

13 类型选择

类型选择是一种按顺序从几个类型断言中选择分支的结构。
类型选择与一般的switch语句相似,不过类型选择中的case为类型(而非值),它们针对给定接口值所存储的值的类型进行比较。

switch v := i.(type) {
case:T:
case: S:
default:
}

note:此选择语句判断接口值i保存的值类型是T还是S。在T或S的情况下,变量v会分别按T或S类型保存i拥有的值。在默认(即没有匹配)的情况下,变量v与i的接口类型和值相同。

类型选择中的声明与类型断言i.(T)的语法相同,只是具体类型T被替换为关键字type。

package main

import "fmt"

func main()  {
  var i interface{} = "ssss"
  switch i.(type) {
  case int:
    fmt.Println("int")
  case string:
    fmt.Println("string")
  default:
    fmt.Println("don't know")
  }
}

学习源:Go 指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值