Go: interface

结构体的接口实现方法参数为指针类型时,会报编译错误

package main

type USB interface {
    method()
}
type Vale struct {
}

func (vale *Vale) method() {  // 指针类型
    println("vale method")
}

func main() {
    var vale Vale = Vale{}
    // var usb USB = vale
    var usb USB = &vale // 实现方法为指针类型时, 把vale地址赋给接口类型变量
    usb.method()
}

 

 

Extend VS Interface:

package main

type Monkey struct {
    Name string
}

func (monkey *Monkey) climb() {
    println("monkey climb")
}

type Flyable interface {
    fly()
}
type Swimable interface {
    swim()
}
type LittleMonkey struct {
    Monkey
}

func (m *LittleMonkey) fly() {
    println(m.Name, "fly")
}
func (m *LittleMonkey) swim() {
    println(m.Name, "swim")
}

func main() {
    monkey := LittleMonkey{
        Monkey{
            Name: "vaginal",
        },
    }
    monkey.climb()
    var swim Swimable = &monkey
    swim.swim()
    var fly Flyable = &monkey
    fly.fly()
}

 

posted @ 2022-05-18 16:40  ascertain  阅读(15)  评论(0编辑  收藏  举报