golang interface用法

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


接口是一个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,
就表示它"实现"了该接口无须在该类型上显式添加接口声明。

所谓对应方法,是指有相同名称、参数列表 (不包括参数名) 以及返回值。当然,该类型还
可以有其他方法。
(1)接口命名习惯以er结尾结构体。
(2)接口只有方法签名,没有实现。
(3)接口没有数据字段。
(4)可在接口中嵌入其他接口。
(5)类型可实现多个接口。

下面举个栗子:
用例:一个人,他的有两种角色,在公司是程序猿,在家里是孩他爸。在公司当程序猿时就写bug,
在家当爹时就洗尿布。则其接口和结构体的映射关系为:

package main
import "fmt"

type CodeMonkey interface {
    codingEveryday() string
}

type Parent interface {
    washingDiaper() string
}

type Person struct {
    id   int
    name string
}

func (self *Person) codingEveryday() string {
    return fmt.Sprintf("user %d, %s write bug every day.", self.id, self.name)
}

func (self *Person) washingDiaper() string {
    return fmt.Sprintf("user %d, %s take care of his baby.", self.id, self.name)
}

func main() {
    var monkey CodeMonkey = &Person{1, "Tom"}
    fmt.Println(monkey.codingEveryday())

    var father Parent = &Person{2, "John"}
    fmt.Println(father.washingDiaper())
}


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

本文来自:开源中国博客

感谢作者:Estone

查看原文:golang interface用法

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

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