Sobes.tech
Junior — Middle

A quem pertence a chamada do método se dentro de um mesmo objeto há outro objeto embutido com o mesmo método?

sobes.tech IA

Resposta da IA

Em Go, se dentro de um mesmo objeto (estrutura) houver outro objeto embutido (embedded) com um método com o mesmo nome, a chamada do método através do objeto externo acessará o método do objeto externo, se estiver definido. Se o método não estiver definido no objeto externo, a chamada será delegada ao objeto embutido.

Exemplo:

package main
import "fmt"

type Inner struct{}
func (i Inner) Method() { fmt.Println("Inner Method") }

type Outer struct {
    Inner
}

func (o Outer) Method() { fmt.Println("Outer Method") }

func main() {
    o := Outer{}
    o.Method()      // Chama Outer.Method
    o.Inner.Method() // Chama Inner.Method
}

Portanto, se o método estiver definido no objeto externo, ele "sobrepõe" o método do objeto embutido com o mesmo nome. A chamada o.Method() pertence ao objeto externo. Se o método não estiver presente no objeto externo, a chamada será redirecionada ao objeto embutido.