美文网首页
golang接口

golang接口

作者: 程序小白菜 | 来源:发表于2019-12-31 17:04 被阅读0次

定义

在 Go 中,关键字 interface 被赋予了多种不同的含义。每个类型都有接口,意味着对那个类型定义了方法集合 。

  • 这段代码定义了具有一个字段和两个方法的结构类型 S。
type S struct { i int }
func (p *S) Get() int { return p.i }
func (p *S) Put(v int) { p.i = v }
  • 可以定义接口类型,仅仅是方法的集合。
type I interface {
    Get() int
    Put(int)
}
  • 定义另外一个类型同样实现了接口 :
type R struct { i int }
func (p *R) Get() int { return p.i }
func (p *R) Put(v int) { p.i = v }
  • 类型判断-在 switch 之外使用 (type) 是非法的。类型判断不是唯一的运行时得到类型的方法。
func f(p I) {
    switch t := p.(type) {  //类型判断
    case *S: //p 的实际类型是 S 的指针
    case *R:  //p 的实际类型是 R 的指针
    case S:  //p 的实际类型是 S
    case R:  //p 的实际类型是 R
    default:  //实现了 I 的其他类型
    }
}
  • 为了在运行时得到类型,同样可以使用 “comma, ok” 来判断一个接口类型是否实现了某个特定接口:
if t, ok := something.(I) ; ok {
    // 对于某些实现了接口 I 的
    // t 是其所拥有的类型
}
  • 确定一个变量实现了某个接口,可以使用:

t := something.(I)

  • 空接口
    由于每个类型都能匹配到空接口: interface{}。
func g(something interface { }) int {
    return something.(I).Get()
}

相关文章

网友评论

      本文标题:golang接口

      本文链接:https://www.haomeiwen.com/subject/pzxioctx.html