面向接口 - day 3

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

type Traversal interface {
    Traverse()
}
func main() {
    traversal := getTraversal()
    traversal.Traverse()
}

duck typing

  • 描述事物的外部行为而非内部结构
  • golang类似duck typing
  • golang中接口是由使用者定义的
  • 实现者只需要实现接口的方法就可以

接口的内部实现

  • 接口中包含实现者的类型和实现者的值/实现者的指针

将实现者赋值给接口变量时有两种方式:值赋值和指针赋值

  • 值赋值是将实现者的值赋给接口的内部变量
  • 指针赋值是将实现者的指针赋值给接口的内部变量

接口的指针赋值只能将实现者的指针赋值给接口变量
接口的值赋值既可以将实现者的指针赋值给接口变量又可以将值赋值给接口变量
一般不使用接口的指针,因为可以将指针封装到接口实现的内部

查看接口的类型:
//Type Switch

switch v := r.(type) {    //r是接口变量
case mock.Retriever:
    fmt.Println("Contents:", v.Contents)
case *real.Retriever:
    fmt.Println("UserAgent:", v.UserAgent)
}

or

//Type Assertion
if mockRetriever, ok := r.(*mock.Retriever); ok {
    fmt.Println(mockRetriever.Contents)
} else {
    fmt.Println("r is not a mock retriever")
}

golang中的任何类型interface{}

  • r.(int):取出r中的int类型数据,当r中的数据类型不是int时会在运行时报错

接口的组合



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

本文来自:简书

感谢作者:

查看原文:面向接口 - day 3

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

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