Если вы только начинаете Go после Java или Python, первым делом удивит отсутствие классов. Вместо них структуры: обычный набор полей, к которому методы «прикрепляются» отдельно. Конструкторов тоже нет, поэтому обычно пишут вспомогательную функцию вроде
NewOrder.Главная ловушка для новичка: приёмник метода.
(o Order) передаёт копию, а (o *Order) передаёт указатель и может менять оригинал. Если метод вроде MarkPaid не меняет статус, проверьте, не забыли ли звёздочку.Наследования нет, поэтому «расширить»
Order до PremiumOrder через extends не получится. Это заставляет думать не в категориях «родитель и ребёнок», а в категориях «данные + поведение». В статье автор разбирает, чем в Go заменяет наследование, и почему серьёзные проекты на этом строятся.
