方法覆盖,嵌入和指针在golang.不能分配嵌入变量

osh3o9ms  于 2023-03-27  发布在  Go
关注(0)|答案(1)|浏览(117)

在go代码中,有一个方法说:

init() {
   service = &Service {
      updater: updaterVariable
   } 
}

更新程序字段的类型为*lib.Updater
我试图覆盖lib.Updater的一个方法,并将其传递给init方法中的&Service(如上所述)。
我正在做的是:

type ModifiedUpdater struct {
  lib.Updater
}

//overridden method
func (f *ModifiedUpdater) Update(...) { 
  //implementation
}

当我初始化修改后的更新程序并尝试将其传递给Service时,我得到了类似于以下"Cannot use variable of *ModifiedUpdater as *Updater"的内容
我尝试分配的方式:

init() {
   modifiedUpd := &ModifiedUpdater{*lib.Updater{conn}}
   service = &Service {
      updater: modifiedUpd
   } 
}

我该怎么解决或者我应该采取什么方法?谢谢。

fwzugrvs

fwzugrvs1#

在Go语言中,我们没有继承,你不能覆盖结构体的方法。

type Updater interface {
   Update(...)
}

然后在某个结构中实现此方法

type somestruct struct {
}

func (ss somestruct) Update(...) {
    //do some work
}

最后,您可以在init()函数中使用此结构体

init() {
  service = &Service {
     updater: somestruct{}
  } 
}

你的服务应该看起来像这样:

type Service struct {
     Updater updater
}

相关问题