這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
一、概念
介面類型是對其它類型行為的抽象和概括;因為介面類型不會和特定的實現細節綁定在一起,通過這種抽象的方式我們可以讓我們的函數更加靈活和更具有適應能力。
Go語言中介面類型的獨特之處在於它是滿足隱式實現的。也就是說,我們沒有必要對於給定的具體類型定義所有滿足的介面類型;簡單地擁有一些必需的方法就足夠了。
這種設計可以讓你建立一個新的介面類型滿足已經存在的具體類型卻不會去改變這些類型的定義;當我們使用的類型來自於不受我們控制的包時這種設計尤其有用。
二、介面的聲明及使用
package mainimport ( "fmt")type ICale interface { Sum(a, b int) int}type Computer struct {}func (this *Computer) Sum(a, b int) int { return a + b}func (this *Computer) Print() int { fmt.Println("ai")}func main() { fmt.Println(new(Computer).Sum(1, 2)) var icale ICale = new(Computer) fmt.Println(icale.Sum(2, 3))}
三、空介面類型:對實現它的類型沒有要求,所以我們可以將任意一個值賦給空介面類型
package mainimport ( "fmt")func main() { var v interface{} v = 1 fmt.Println(v) v = "123" fmt.Println(v) v = true fmt.Println(v) v = map[string]int{"one": 1} fmt.Println(v)}
package mainimport ( "fmt")func main() { print(map[string]int{"one": 1}) print(func() int { return 1 }) print(func() int { return 1 }())}func print(val interface{}) { fmt.Println(val)}