go语言基础之接口,空接口,类型断言

接口
在Go语言中的接口是一种类型,一种抽象类型,interface是一组方法(method)的集合,接口就像是定义了一个协议,一个规则,,只要一台机器有洗衣服和甩干功能我们就叫他是洗衣机,不关心属性,只关心行为
接口实现的条件
一个对象只要全部实现了接口中的方法,那么就实现了这个接口,换句话说,接口就是一个需要实现的方法列表
接口类型变量
接口类型可以存储所有实现了该接口的实例,
类型与接口的关系
一个类型可以同时实现多个接口,这些接口之间是独立的
接口的值
接口的存储分为两部分,一部分是具体类型,一部分是具体类型的值,这两部分分别称为,动态类型和动态值。

package main

import "fmt"
//定义一个接口
type pp interface {
    run()
}

type person struct {
    name string
    age  int
}
func (p *person) run() {
    fmt.Println("跑")
}
type print struct {
    name string
}
func (p print) run() {
    fmt.Println("跑不了")
}
func main() {
    p := &person{
        "dlq",
        21,
    }
    //初始化接口
    pp1 := pp(p)
    pp1.run()
    p1 := print{
        "zkj",
    }
    //接口类型可以存储所有类型的实力
    //当类型下的函数,为指针就守着,那么存到接口中的也应该为指针类型
    pp2 := pp(p1)
    pp2.run()
}

接口的嵌套,类型与接口的关系,空接口,类型断言

package main

import "fmt"
type pp1 interface {
    run()
}
type pp2 interface {
    move()
}
//接口的嵌套,那么这个切口就拥有所有嵌套的接口中的方法
type pp3 interface {
    pp1
    pp2
}
type person struct {
    name string
    age  int
}
func (p *person) run() {
    fmt.Println("run")
}
func (p *person) move() {
    fmt.Println("move")
}
//一个类型可以同时实现多个接口,接口之间是独立的
func main() {
    p := &person{}
    pp1 := pp1(p)
    pp2 := pp2(p)
    pp1.run()
    pp2.move()
    pp3 := pp3(p)
    pp3.move()
    //空接口
    mapp := map[string]interface{}{
        "name":  "dlq",
        "age":   12,
        "hobby": []string{"吃", "喝", "玩", "乐"},
    }
    fmt.Println(mapp)
    x := mapp["hobby"]
    //类型断言,判断一个变量是不是你想要的值
    v, ok := x.([]string)
    if !ok {
        fmt.Println("这个变量不是[]string类型")
    }
    fmt.Println(v)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值