Ответ
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" }
Теперь оба типа корректно реализуют интерфейс.