关于调用别名中复写匿名成员方法的疑惑

weixin_38056080 2019-09-20 10:53:30
[https://play.golang.org/p/kTvcsWkJeaZ](https://play.golang.org/p/kTvcsWkJeaZ)
````
package main

type T1 struct {
}

func (T1) Hello(T1) {
}

type T2 struct {
T1
}

func (T2) Hello(T2) {
}

type T3 T2
type T4 = T2

func main() {
var v_T3 T3
v_T3.Hello(v_T3)
var v_T4 T4
v_T4.Hello(v_T4)
}
````
prog.go:21:12: cannot use v_T3 (type T3) as type T1 in argument to v_T3.T1.Hello

go version go1.11.2 linux/amd64

程序如上.在21行,golang为何会去调用v_T3.T1.Hello而不是v_T3.Hello方法呢?

v_T3.Hello(v_T3)会报错

v_T4.Hello(v_T4)就不会

请大佬解惑,跪谢~
...全文
67 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38056491 2019-09-20
  • 打赏
  • 举报
回复
1、别名,可以拥有原有类型的所有元素和方法。 2、type A B,A 和B 是不同的type,是一个新的type,拥有B 的所有元素,但是不拥有B 的方法。
weixin_38060626 2019-09-20
  • 打赏
  • 举报
回复
以我的这个例子来说,T3不拥有T2的方法,那为啥拥有T1的方法?因为T1是T2的元素?因此T3拥有T1这个元素,因此就有了这个T1的方法?
weixin_38066087 2019-09-20
  • 打赏
  • 举报
回复
你现在的T3就是和T2 一个level 的,为什么会拥有T2的东西?那肯定是拥有T1的东西啊
weixin_38068363 2019-09-20
  • 打赏
  • 举报
回复
ok,明白!

473

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧