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