На этом шаге рассмотрим переопределение встраиваемых полей в Go.
Методы встраиваемых полей можно переопределять, просто создавая для встраивающей структуры новые методы с теми же именами, что и методы встроенного поля. Например, предположим, что имеется следующий тип элемента:
type LuxuryItem struct { Item // Анонимное поле(встраивание) markup float64 // Именованное поле (агрегирование) }
Если вызвать метод Cost() относительно значения типа LuxuryItem, будет вызван метод Item.Cost() встроенного типа, как и в случае со значением типа SpecialItem.
func (item *LuxuryItem) Cost() float64 { return item.Item.Cost() * item.markup }
Архив с примерами можно взять здесь.
Последняя реализация использует уже имеющийся метод Cost(). Переопределяющие методы не должны использовать методов встроенного типа, если в этом нет необходимости.
На следующем шаге рассмотрим использование методов-выражений в Go.