接口

什么是鸭子类型

go语言的处处是interface,到处是鸭子类型
当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来像鸭子、那么这只鸟就是鸭子。

接口的定义

package main

import "fmt"

// 声明一个duck接口
type Duck interface {
    gagaga()
    wale()
    swimming()
}

// 声明一个pskDuck 结构体
type pskDuck struct {
}

// pskDuck 结构体去实现接口Duck的gagaga方法
func (pd *pskDuck) gagaga() {
    fmt.Println("gagagagaga")
}

// pskDuck 结构体去实现接口Duck的gagaga方法
func (pd *pskDuck) wale() {
    fmt.Println("wale")
}

// pskDuck 结构体去实现接口Duck的swimming方法
func (pd *pskDuck) swimming() {
    fmt.Println("swimming")
}

func main() {
    var d Duck = &pskDuck{}

    d.gagaga()
}
//输出
gagagagaga


假设我们注释掉 swimming 这个实现方法,则会报错,因为使用接口必须得实例化他的所有方法。

以上例子就是 duck为鸭子接口类型。 psk类似可达鸭,他叫起来像duck(实现了duck的gagaga),看也像鸭子(实现了wale),游泳起来像鸭子(实现了swiming)。所以他是duck鸭子

实际编程会大量使用接口,有助于代码的解耦。
接口可以没有任何方法,这样就可以把struct赋值给他,任何类型都可以往里面放。
接口定义完要实现。

多接口的实现。

文档更新时间: 2023-07-15 01:40   作者:young