go語言介面型別
阿新 • • 發佈:2019-01-07
介面型別使自身也是一種結構型別,但是編譯器對其做了一些限制。
type iface struct{
tab *itab //型別資訊
data unsafe.Pointer //實際物件指標
}
編譯器是根據方法集來判斷是否實現了介面,請看下面試例
如何查詢當前結構體的方法集?
func methodSet(a interface{}) {
t := reflect.TypeOf(a)
for i, n := 0, t.NumMethod(); i < n; i++ {
m := t.Method(i)
fmt.Println(m.Name)
}
}
請看下面典型的實現介面的例項
package main import ( "fmt" ) type tester interface { test() string() string } type user struct{} func (*user) test() {} func (user) string() string { return "hello world" } func main() { var d user //var t tester = d // user does not implement tester var t tester = &d t.test() fmt.Println(t.string()) }