對於golang的接口,糾結兩天了,今天有種茅塞頓開的感受,有必要寫點東西了。golang
糾結接口,說白了就是搞不透接口,方法,結構體幾者之間的關係以及具體的用途。能夠簡單的從三者的定義提及,接口說白了就是一個方法(method)集,結構體就是一個類,一般保存屬性,方法至關於類的函數,不過有兩種類型的接受者(對象),一種是值,一種是指針,指針能改變結構體中的屬性值。在go中,只要結構體的方法實現(包含)了接口中全部的方法,就能夠說這個結構體實現了這個接口。定義講清楚後能夠看看接口到底有什麼用了,接下來給出兩段代碼。函數
package main
spa
import "fmt"
指針
type act interface { //定義一個act接口,包含一個write方法
code
write()
對象
}
接口
type xiaoming struct { //xiaoming結構體
it
}
io
type xiaofang struct { //xiaofang結構體
class
}
func (xm *xiaoming) write() { //xiaoming結構體的方法write,接收者爲指針類型。即xiaoming實現了act接口
fmt.Println("xiaoming write")
}
func (xf *xiaofang) write() { //同上,xiaofang實現了act接口
fmt.Println("xiaofang write")
}
func main() {
var w act
xm := xiaoming{}
xf := xiaofang{}
w = &xm //實例化接口,因爲xm是指針類型的接收者,必須加&
w.write()
w = &xf //同上
w.write()
}
輸出結果爲:xiaoming write
xiaofang write
這個例子一樣能說明go語言面向對象的多態性質。接口其實是做爲中間體調用結構體的方法。
第二個例子: