介面是一種型別,它定義了一個或多個方法簽名

方法並沒有被實現,只有它們的簽名:方法名稱、參數型別和返回值型別。

像這樣:

type Speaker interface {
 Speak()
}

現在你可以有一個函數接受任何實現了介面所定義的所有方法的型別:

func SaySomething(s Speaker) {
 s.Speak()
}

並且我們可以將任何實現了這些方法的結構體傳遞給它:

type Speaker interface {
 Speak()
}

type Person struct {
 Name string
 Age int
}

func (p Person) Speak() {
 fmt.Println("來自" + p.Name + "的問候")
}

func SaySomething(s Speaker) {
 s.Speak()
}

func main() {
 flavio := Person{Age: 39, Name: "Flavio"}
 SaySomething(flavio)
}