golang接口

1.概念

golang接口是一个动态类型动态值的集合,定义了对象的行为,不指定实现。只要一个类型定义了接口全部的方法,就可被认为是实现接口
**动态类型:**实现接口的具体数据类型
**动态值:**实现接口的数据的值或者引用

//定义接口
type Speaker interface{
	Speak()
}

//实现接口的类型
type Duck struct{}

//实现接口要求的方法
func (Duck)Speack(){
	fmt.Println("lalala")
}

func main(){
	var s Speaker =Duck{} //接口赋值
	s.Speack()  //接口方法调用
}

2.接口类型断言与类型判断

类型断言

value := interfaceValue.(T)

//返回两个值:提取的值和一个布尔值 ok,如果断言成功,ok 为 true,否则为 false
value, ok := interfaceValue.(T)
func main() {
    var i interface{} = 42

    // 类型断言(不安全)不匹配会panic
    v := i.(int) // 成功,v 是 int 类型
    fmt.Println(v)

    // 类型断言(安全)
    v2, ok := i.(float64)
    if ok {
        fmt.Println("Success:", v2)
    } else {
        fmt.Println("Type assertion failed")
    }
}

类型判断

switch v := interfaceValue.(type) {
case T1:
    // interfaceValue 的动态类型是 T1
case T2:
    // interfaceValue 的动态类型是 T2
default:
    // interfaceValue 的动态类型是其他
}

3.接口的nil判断

当接口的type和value都为nil时,接口本身才为nil
接口赋值为nil时,接口类型不为nil,所以接口
参考面试鸭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值