Sobes.tech
Назад к вопросам
Junior — Middle
74

Кому принадлежит вызов метода, если внутри одного объекта есть встроенный другой объект с таким же методом?

Ответ от нейросети

sobes.tech AI

В 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() принадлежит внешнему объекту. Если метод отсутствует во внешнем объекте, то вызов будет перенаправлен к встроенному объекту.