Golang 之 类型断言

    类型断言即判断一个变量是不是某个类型的实例,这个经常用在判断接口的类型,基本的格式:

y, ok := x.(type)

上面的语句用于判断变量x是不是type类型,有两种结果:

  1. x是type类型的变量,那么返回x的副本赋值给y,ok的值为true
  2. x不是type类型的变量,那么返回一个空的stuct,ok的值为false

注意判断x是不是type类型的变量时,type类型的结构(struct)就必须实现x类型的接口,否则进行类型断言是不合法的。

package main
 
import "fmt"
 
type human interface {
    say()
}
type stu struct {
    name string
}
 
func (s stu) say() {
    fmt.Println("his name is ", s.name)
}
func hide(h human) {
    //进行类型断言
    //前提是stu的结构类型(struct)必须实现 h类型的接口
    if p, ok := h.(stu); ok {
        fmt.Print("是stu的结构类型   ")
        fmt.Println(p.name, ok)
    } else {
        fmt.Println("不是stu的结构类型")
    }
}
func main() {
    var h human    // 接口类型
    h = stu{name: "xyz"}
    h.say()
    hide(h)
}

        可以在进行类型断言的func那里传入一个空接口(空接口本身没有任何方法,则所有结构都实现了空接口,此时空接口类似其他语言中的超类Object),所以可以有更多的类型断言,根据传入类型进行不同操作,还可以使用 switch type

func hide(x interface{}) {
    switch v := x.(type) {
    case stu:
        fmt.Println(v.name)
    default:
        fmt.Println("none")
    }
}
// 注意上面的是 x.(type),并没有指定type类型,反而让系统去猜x到底是什么样的类型。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值