golang中所谓的”方法提升“,求解答。。。。

midnight_vivian · 2014-07-21 11:32:13 · 3340 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2014-07-21 11:32:13 的主题,其中的信息可能已经有所发展或是发生改变。

  如果 S 包含一个匿名字段 T,S 的方法集不包含接受者为 *T 的方法提升。

这条原则说的是当我们嵌入一个类型,嵌入类型的接受者为指针的方法将不能被外部类型的值访问。 刚才在golang中国博客上看到这个说法,自己验证了后发现完全可以访问,哪位高手能解释下,期待ing......


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

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

3340 次点击  
加入收藏 微博
2 回复  |  直到 2014-07-21 14:08:03
polaris
polaris · #1 · 11年之前

我给你一个示例:

package main

import (
    "fmt"
)

type T struct{}

func (this *T) MyApi() {
    fmt.Println("I am T method")
}

type S struct {
    T
}

type MyInterface interface {
    MyApi()
}

func main() {
    var s S
    // Test(s) // 编译通不过
    s.MyApi() // 直接调用没问题
}

func Test(inter MyInterface) {
    inter.MyApi()
}

也就是,方法集是针对接口实现这个层面来说的。

midnight_vivian
midnight_vivian · #2 · 11年之前
polarispolaris #1 回复

我给你一个示例: package main import ( "fmt" ) type T struct{} func (this *T) MyApi() { fmt.Println("I am T method") } type S struct { T } type MyInterface interface { MyApi() } func main() { var s S // Test(s) // 编译通不过 s.MyApi() // 直接调用没问题 } func Test(inter MyInterface) { inter.MyApi() } 也就是,方法集是针对接口实现这个层面来说的。

你的示例我能理解,看来是我对方法集这个概念的定位有误,这下明白了,十分感谢!

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