golang
的interface
並不像其他高級語言在類定義時添加限定作用,而是通過向上轉型的方式,在業務代碼的上下文中判斷結構體(類)是否實現了接口裏聲明的方法。
type interfact Person {
SetName(name string)
GetName() string
SetAge(age int)
GetAge() int
}
type Boy struct {
Name string
Age int
}
func (boy *Boy) SetName(name string) {
boy.Name = name
}
func (boy *Boy) GetName() string {
return boy.Name
}
func (boy *Boy) SetAge(age int) {
boy.Age = age
}
func (boy *Boy) GetAge() int{
return boy.age
}
func main() {
// 注意這裏 boy 的類型是 Person
var boy Person
// 如果 Boy 對象沒有完全實現 Person 的方法 此處向上轉型會報錯
// 而且一旦通過接口限定 golang 不會幫你把變量隱式轉爲指針
// 所以這裏必須要加 & 或者用 new
boy = &Boy{"big_cat", 29}
boy.SetName("sqrt_cat")
boy.setAge(18)
fmt.Println(boy.GetName(), boy.GetAge())
}