自学内容网 自学内容网

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,所以接口
参考面试鸭


原文地址:https://blog.csdn.net/weixin_45627369/article/details/145248205

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!