侧边栏壁纸
博主头像
秋码记录

一个游离于山间之上的Java爱好者 | A Java lover living in the mountains

  • 累计撰写 29 篇文章
  • 累计创建 40 个标签
  • 累计创建 185 个分类

Go 语言中的空接口(Let's Go 二十七)

所谓空接口就是没有方法集,以至于任何类型都可实现它,换言之,也就是空接口可以保存任意类型的值。

所谓空接口就是没有方法集,以至于任何类型都可实现它,换言之,也就是空接口可以保存任意类型的值。


package main

import (
    "fmt"
)

func main() {

    var any interface{}

    any = 4
    fmt.Printf("any 值为 %d ,类型为 %T \n", any, any)

    any = "https://qiucode.cn"
    fmt.Printf("any 值为 %d ,类型为 %T \n", any, any)

}

img

接口与类型之间转换

package main

import (
    "fmt"
)

type Flyer interface {
    Fly()
}

type Walker interface {
    Walk()
}
type Bird struct{}

func (b *Bird) Fly() {
    fmt.Println("fling....")
}

func (b *Bird) Walk() {
    fmt.Println("Walking ....")
}

type Peple struct{}

func (p *Peple) Walk() {
    fmt.Println(" peple walk ...")
}

func main() {

    animals := map[string]interface{}{
        "bird":  new(Bird),
        "peple": new(Peple),
    }
    // 遍历映射
    for name, obj := range animals {
        f, isFlyer := obj.(Flyer)
        w, isWalker := obj.(Walker)
        fmt.Printf("name: %s isFlyer: %v isWalker: %v\n", name, isFlyer, isWalker)
        if isFlyer {
            f.Fly()
        }
        if isWalker {
            w.Walk()
        }
    }

}

img