golang
的interface
并不像其余高级语言在类定义时添加限定做用,而是经过向上转型的方式,在业务代码的上下文中判断结构体(类)是否实现了接口里声明的方法。golang
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()) }