Что означает буква L в SOLID

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

Ответ

L в SOLID означает Liskov Substitution Principle (Принцип подстановки Барбары Лисков). Он гласит, что объекты базового класса должны быть заменяемы объектами производных классов без изменения корректности программы.

Пример нарушения:

type Bird interface {
    Fly() string
}

type Duck struct{}
func (d Duck) Fly() string { return "Flying" }

type Penguin struct{}
func (p Penguin) Fly() string { panic("Penguins can't fly!") }

Здесь Penguin нарушает LSP, так как не может заменить Bird без ошибок.

Исправленный вариант:

type Bird interface {
    Move() string
}

type Duck struct{}
func (d Duck) Move() string { return "Flying" }

type Penguin struct{}
func (p Penguin) Move() string { return "Swimming" }

Теперь оба типа корректно реализуют интерфейс.