суббота, 9 февраля 2019 г.

Go FAQ: Почему в Go нет наследования типов?

Объектно-ориентированное программирование, по крайней мере на самых известных языках, включает в себя слишком много обсуждения отношений между типами, отношений, которые часто могут быть получены автоматически. Go использует другой подход.

Вместо того, чтобы требовать от программиста заранее объявить, что два типы связаны, в Go тип автоматически удовлетворяет любому интерфейсу - это определяет подмножество его методов. Помимо уменьшения количества кода, у этого подхода есть реальные преимущества. Типы могут удовлетворить много интерфейсов одновременно, без сложностей традиционного множественного наследования. Интерфейсы могут быть очень легкими - интерфейсы с одним методом или даже без метода могут выразить полезную концепцию. Интерфейсы могут быть добавлены после того, как придет новая идея или для тестирования - без указания оригинальных типов. Поскольку нет явных отношений между типами и интерфейсами, нет иерархии типов для управления ими или обсуждения их.

Можно использовать эти идеи для создания чего-то аналогичного безопасных для типов Unix pipes. Например, посмотрите, как fmt.Fprintf позволяет форматировать печать на любой вывод, не только файл, или как пакет bufio может быть полностью отделен от файлового ввода-вывода, или как пакеты image генерируют сжатые файлы изображений. Все эти идеи проистекают из единого интерфейса (io.Writer), представляющего один метод (Write). И это только малая часть. Интерфейсы Go оказывают глубокое влияние на структуру программ.

Требуется некоторое привыкание, но этот неявный стиль зависимости типа - одна из самых продуктивных вещей в Go.


Читайте также:


1 комментарий:

Slach комментирует...

Ну вот не согласен

что делать если мне нужна общая имплементация какого то метода или группы методов
в нескольких "наследуемых" типах? при этом метод вызывает другие методы, часть которых уже "переопределена" а часть "нет"

я вроде решил это через определение интерфейса который подаю на вход

в общем статья требует показать реальные примеры с code reusage

Отправить комментарий