При конфликте имен метод внешней структуры затеняет метод встроенной:
type Base struct{}
func (b Base) String() string { return "base" }
type Extended struct {
Base
}
func (e Extended) String() string { return "extended" }
e := Extended{}
fmt.Println(e.String()) // "extended" - метод Extended
fmt.Println(e.Base.String()) // "base" - явный вызов Base
Правила приоритета:
Это используется для "переопределения" поведения: например, встроить тип с реализацией интерфейса и переопределить один метод.