golang interface 接口的概念及实例

big_cat · · 16736 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golanginterface并不像其他高级语言在类定义时添加限定作用,而是通过向上转型的方式,在业务代码的上下文中判断结构体(类)是否实现了接口里声明的方法。

type Person interface{
    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())
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:big_cat

查看原文:golang interface 接口的概念及实例

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

16736 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传