Вариантные типы, также известные как алгебраические типы, предоставляют способ указать, что значение может принимать один из множества других типов, но только те типы, которые входят в это множество. Типичным примером в системном программировании было бы указать, что ошибка (например, ошибка сети, ошибка безопасности или ошибка приложения) позволяет вызывающему абоненту определить источник проблемы, изучив тип ошибки. Другой пример - синтаксическое дерево, в котором каждый узел может быть другого типа: объявление, оператор, назначение и так далее.
Создатели Go рассмотрели добавление вариантных типов в Go, но после обсуждения решили оставить их, потому что они пересекаются с интерфейсами. Что будет, если элементы вариантного типа будут сами интерфейсами?
Кроме того, некоторое из того что вариантные типы позволяют делать уже охвачено в языке. Пример ошибки легко выразить с помощью интерфейсного значения для хранения ошибки и переключателя типов для различения случаев. Пример синтаксического дерева также выполним, хотя и не так элегантно.
Читайте также:
- Go FAQ: Почему в Go нет наследования типов?
- Go FAQ: Почему в Go нет объявлений "implements"?
- Основы Go: интерфейсы
Комментариев нет:
Отправить комментарий