golang類型判斷
阿新 • • 發佈:2018-11-02
實現 一個 ola code urn int 嚴格 type 接口類
_.ok:=interface{}(a).(B)
此語句用於判斷對象a是否是B類型
也可以判斷對象a是否實現了B接口
package main import "fmt" type Pet interface { SetName(name string) Name()string Category()string } type Dog struct { name string } func (dog *Dog) SetName(name string) { dog.name = name } func(dog Dog) Name()string{return dog.name } func (dog Dog)Category()string{ return "dog" } func main() { dog:=Dog{"little pig"} _,ok:=interface{}(dog).(Pet) fmt.Printf("Dog implements interface Pet: %v\n", ok) _, ok = interface{}(&dog).(Pet) fmt.Printf("*Dog implements interface Pet: %v\n", ok) fmt.Println()var pet Pet = &dog fmt.Printf("This pet is a %s, the name is %q.\n", pet.Category(), pet.Name()) }
輸出為:
Dog implements interface Pet: false *Dog implements interface Pet: true This pet is a dog, the name is "little pig".
一個指針類型實現了某某接口類型,但它的基本類型卻不一定能夠作為該接口的實現類型。
怎樣判定一個數據類型的某一個方法實現的就是某個接口類型中的某個方法呢?
這有兩個充分必要條件,一個是“兩個方法的簽名需要完全一致”,另一個是“兩個方法的名稱要一模一樣”。顯然,這比判斷一個函數是否實現了某個函數類型要更加嚴格一些。
這就意味著,Dog類型本身的方法集合中只包含了 2 個方法, 也就是所有的值方法。而它的指針類型*Dog方法集合卻包含了 3 個方法
golang類型判斷