è ansible chiamare il metodo sovrascritto dalla struttura padre in golang?

Voglio implementare tale codice, dove B eredita da A e sovrascrive solo il metodo A’s Foo (), e spero che il codice stampi B.Foo (), ma stampi ancora A.Foo (), sembra che il ricevitore in Golang non può funzionare così in C ++, in cui quando l’associazione dynamic è abilitata, il codice può funzionare come quello che voglio.

Inserisco anche un altro pezzo di codice, che funziona, ma è troppo difficile da implementare, e più come un modo di hacking, penso che non sia uno stile di Golang.

Quindi il mio problema è: se il metodo Bar () del genitore ha qualche logica, per esempio, apri un file, poi leggi alcune righe, e usa Foo () per emettere queste righe su stdout, e il Bambino (nell’esempio è B) vuole usare la maggior parte di loro, l’unica differenza è che il bambino vuole Foo () per produrre le righe su un altro file. Come dovrei implementarlo? Ho sentito che l’eredità di Golang non può funzionare come C ++ o Java, e qual è il modo giusto in Golang?

package main import ( "fmt" ) type A struct { } func (a *A) Foo() { fmt.Println("A.Foo()") } func (a *A) Bar() { a.Foo() } type B struct { A } func (b *B) Foo() { fmt.Println("B.Foo()") } func main() { b := B{A: A{}} b.Bar() } output: A.Foo() 

il seguente pezzo funziona, ma quando scrivi

 a := A{} a.Bar() 

incontrerai un errore del compilatore

 package main import ( "fmt" ) type I interface { Foo() } type A struct { i I } func (a *A) Foo() { fmt.Println("A.Foo()") } func (a *A) Bar() { aiFoo() } type B struct { A } func (b *B) Foo() { fmt.Println("B.Foo()") } func main() { b := B{A: A{}} bi = &b // here i works like an attribute of b b.Bar() output: B.Foo()