Можно ли вызвать переопределенный метод из родительской структуры в Голанге?

Я хочу реализовать такой код, где B наследуется от A и только переопределяет A 's Foo (), и я надеюсь, что код для печати B.Foo (), но он все еще печатает A.Foo (), кажется, что получатель в Golang может 'так не работает в C ++, в котором, когда динамическое связывание включено, код может работать так, как я хочу.

Я также публикую еще один кусок кода, который работает, но этоСлишком сложно для реализации, и больше похоже на взломать, я думаю, что этоЭто не стиль Голанга.

Итак, моя проблема: если родительУ метода Bar () есть некоторая логика, например, откройте файл, затем прочитайте несколько строк и используйте Foo (), чтобы вывести эти строки в стандартный вывод, и Child (в примере это B) хочет использовать большинство из них, единственное отличие состоит в том, что Child хочет, чтобы Foo () выводила строки в другой файл. Как мне это реализовать? Я слышал, что Голангнаследство можетработать как C ++ или Java, и чтоправильный путь на Голанге?

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()

следующий кусок работает, но когда пишешь

a := A{}
a.Bar()

вы столкнетесь с ошибкой компилятора

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() {
    a.i.Foo()

}

type B struct {
    A
}

func (b *B) Foo() {
    fmt.Println("B.Foo()")
}

func main() {
    b := B{A: A{}}
    b.i = &b     // here i works like an attribute of b
    b.Bar()

output: B.Foo()

Ответы на вопрос(5)

Ваш ответ на вопрос