У какого объекта выводится метод, если один из них встроен в другой и оба имеют одинаковый метод

«У какого объекта выводится метод, если один из них встроен в другой и оба имеют одинаковый метод» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Если встроенный (embedded) и внешний тип имеют метод с одинаковым именем, приоритет будет у метода внешнего типа. Это называется "shadowing".

type A struct{}
func (a A) Foo() { fmt.Println("A.Foo") }

type B struct{ A }
func (b B) Foo() { fmt.Println("B.Foo") }

func main() {
    b := B{}
    b.Foo() // Выведет "B.Foo"
    b.A.Foo() // Явный вызов метода A
}

Если нужно вызвать метод встроенного типа, можно обратиться к нему явно через имя поля (даже если оно анонимное).