Sobes.tech
Junior — Middle

¿A quién pertenece la llamada al método si dentro de un mismo objeto hay otro objeto incorporado con el mismo método?

sobes.tech AI

Respuesta de la IA

В Go, если внутри одного объекта (структуры) есть встроенный (embedded) другой объект с методом с таким же именем, вызов метода через внешний объект будет обращаться к методу внешнего объекта, если он определён. Если метод не определён в внешнем объекте, то вызов будет делегирован встроенному объекту.

Пример:

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()      // Вызовет Outer.Method
    o.Inner.Method() // Вызовет Inner.Method
}

Таким образом, если метод определён в внешнем объекте, он "перекрывает" метод встроенного объекта с тем же именем. Вызов o.Method() принадлежит внешнему объекту. Если метод отсутствует во внешнем объекте, то вызов будет перенаправлен к встроенному объекту.