求问一个结构体内嵌入接口类型的简单问题

MrDoubleU · 2018-06-07 01:06:33 · 932 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-06-07 01:06:33 的主题,其中的信息可能已经有所发展或是发生改变。

看go语言圣经的时候看到第七章sort.go有这样一段代码

type Interface interface {
    Len() int
    Less(i, j int) bool
    Swap(i, j int)
}

type reverse struct {
    Interface
}

func (r reverse) Less(i, j int) bool {
    return r.Interface.Less(j, i)
}

func Reverse(data Interface) Interface {
    return &reverse{data}
}

求问,reverse类嵌入了一个接口,这是咋回事呢?有没有接口被嵌入到结构体中相关的教程呢? 主要是不明白这种嵌入代表什么?reverse变成了什么类型?


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

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

932 次点击  
加入收藏 微博
1 回复  |  直到 2018-06-07 11:31:54
marlonche
marlonche · #1 · 7年之前
StructType    = "struct" "{" { FieldDecl ";" } "}" .
FieldDecl     = (IdentifierList Type | EmbeddedField) [ Tag ] .
EmbeddedField = [ "*" ] TypeName .
Tag           = string_lit .

EmbeddedField 可以是任意类型,struct类型也好,interface类型也好,只要能被赋值

对于上面reverse类型的变量,里面的Interface匿名成员被赋值后reverse变量才能用,这样Interface匿名成员的方法集就可以被reverse的变量使用了

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