go新手请教一个interface的问题

ruiruining2010 2019-01-09 04:08:32
希望能实现如下的功能,尝试了很久一直不对,请教各位大神

现在有一个interface : I
type I interface {
DO()
}

I有两个子类D1和D2,D1和D2都会占用某个唯一的资源,因此不能复制

现在有一个struct : S,我希望能运行时赋值 ii,并调用DO函数
我以为可以这样写

type S struct {
ii *I
}
//
func (s *S) Do() {
s.ii.DO()
}
//
d1 := D1{}
d2 := D2{}
s1 := S{ ii : d1 }
s2 := S{ ii : d2 }

但是发现无法编译
如果写成
type S struct {
ii I
}

这里就会有拷贝。。。
尝试了各种姿势始终不行。。。
...全文
179 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
billgates_wanbin 2019-11-10
  • 打赏
  • 举报
回复
我觉得 编译的时候 问题已经报的很明显了 s1 := S{ ii : &d1 } s2 := S{ ii : &d2 } 要使用指针地址
瑞卡哥哥 2019-10-22
  • 打赏
  • 举报
回复
s1 := S{ ii : &d1 } s2 := S{ ii : &d2 }
oOMirageOo 2019-02-08
  • 打赏
  • 举报
回复
Interface里面的DO是大写。
func(s *S)DO(){//xxx}
nuczzz 2019-01-13
  • 打赏
  • 举报
回复
step1: type I interface { DO() } step2: type S struct { ii I } step3: d1 := &D1{} d2 := &D2{} step4: s1 := S{ ii : d1 } s2 := S{ ii : d2 }

2,348

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • 俺叫西西弗斯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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