澄清:我刚刚学习围棋,遇到了这个问题。


我正在尝试实现一个“类”,它继承了一个调用应该由子类实现的“虚拟”方法的方法。这是我的代码:


package main


import (

    "fmt"

    "sync"

)


type Parent struct {

  sync.Mutex

  MyInterface

}


func (p *Parent) Foo() {

  p.Lock()

  defer p.Unlock()

  p.Bar()

}


func (p *Parent) B(){

  panic("NOT IMPLEMENTED")

}


func (p *Parent) A() {

  p.Lock()

  defer p.Unlock()

  p.B()

}


type MyInterface interface {

  Foo()

  Bar()

}


type Child struct {

  Parent

  Name string

}


func (c *Child) Bar(){

  fmt.Println(c.Name)

}


func (c *Child) B(){

  fmt.Println(c.Name)

}


func main() {

  c := new(Child)

  c.Name = "Child"

  // c.A() panic

  c.Foo() // pointer error

}

我遗漏了一些关于 sync.Mutex 的代码,这些代码对 Child 的值进行一些异步更新。


所以显然在 A() 或 Foo() 中,指针 p 的类型为 Parent。我应该如何更改我的代码,以便 A/Foo 引用 Child 类中定义的 B/Bar?