BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #1318同步于 2018/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

这种问题怎么解决呢

cc19931002
2018/11/18镜像同步10 回复
```go package main import "fmt" type c1 struct { } type c2 struct { } type c3 struct { c1 c2 } type say interface { say() } func (c c1) say(){ fmt.Println("c1") } func (c c2) say(){ fmt.Println("c2") } func main() { var s say = new(c3) s.say() } ``` 报错信息 c3.say is ambiguous cannot use new(c3) (type *c3) as type say in assignment: *c3 does not implement say (missing say method)
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ml3615556机器人#1 · 2018/11/18
类似菱形继承吧,不要这样做就好了 通过『我邮2.0』发布
specops机器人#2 · 2018/11/18
这种设计是有问题的
cc19931002机器人#3 · 2018/11/19
对的,是我实际开发遇到的一个问题,实际情况是这样的,有两个接口,interface1和interface2,这两个接口不可避免有几个方法是一样的。然后分别有两个结构体struct1和struct2分别实现了这两个接口。最后我想要有一个结构体struct3同时实现两个接口。那我在struct3中组合struct1和struct2之后,必须把两个接口中相同的方法再重新实现一次吗?(上面说到的实现都是默认实现,也就是说应该相同接口的相同方法的实现完全一直) 【 在 ml3615556 的大作中提到: 】 : 类似菱形继承吧,不要这样做就好了 : 通过『我邮2.0』发布
cc19931002机器人#4 · 2018/11/19
对的,是有一点问题,但是不这样做感觉重复的代码会很多 【 在 specops 的大作中提到: 】 : 这种设计是有问题的
ml3615556机器人#5 · 2018/11/19
搜一下复合大于继承 【 在 cc19931002 (啦啦) 的大作中提到: 】 : 对的,是我实际开发遇到的一个问题,实际情况是这样的,有两个接口,interface1和interface2,这两个接口不可避免有几个方法是一样的。然后分别有两个结构体struct1和struct2分别实现了这两个接口。最后我想要有一个结构体struct3同时实现两个接口。那我在struct3中组合struct1和struct2之后,必须把两个接口中相同的方法再重新实现一次吗?(上面说到的实现都是默认实现,也就是说应该相同接口的相同方法的实现完全一直) 通过『我邮2.0』发布
cc19931002机器人#6 · 2018/11/19
我现在这个就是组合的,组合的过程中出现的问题 【 在 ml3615556 的大作中提到: 】 : 搜一下复合大于继承 : : 通过『我邮2.0』发布
ml3615556机器人#7 · 2018/11/19
```go type C3 struct { c1 C1 c2 C2 } func main(){ c3 := C3{} c3.c1.say() } ``` 【 在 cc19931002 的大作中提到: 】 : 我现在这个就是组合的,组合的过程中出现的问题
cc19931002机器人#8 · 2018/11/19
如果把c3的类型显示申明为一个接口类型,这样就不行了 【 在 ml3615556 的大作中提到: 】 : ```go : type C3 struct { : c1 C1 : ...................
ml3615556机器人#9 · 2018/11/20
那实现C3的类型实现一下你定义的方法,明确调用c1还是c2 你的代码语义模糊而已,解决就好 【 在 cc19931002 的大作中提到: 】 : 如果把c3的类型显示申明为一个接口类型,这样就不行了