Go 接口

概述

  1. Go 的接口是隐式实现, 不需要写 “implements”.
go接口示例
package main

import "fmt"

/**
任何类型, 只要有 Speak() 方法, 就自动实现这个接口(隐式实现).
*/
type Speaker interface {
    Speak()
}

type Dog struct{}

/**
(d Dog) 是值接收者
Dog 类型有了 Speak() 方法
所以 Dog 自动实现 Speaker 接口
*/
func (d Dog) Speak() {
    fmt.Println("Woof")
}

type Person struct {
    Name string
}
func (p Person) Speak() {
    fmt.Println("Hi, I'm", p.Name)
}

/**
多态
参数类型是 Speaker 接口,可以接收任何实现了 Speak() 的类型
*/
func MakeItSpeak(s Speaker) {
    s.Speak()
}

func main() {
    MakeItSpeak(Dog{})
    MakeItSpeak(Person{Name: "Alice"})
}