понедельник, 11 февраля 2019 г.

Go FAQ: Почему в Go нет вариантных типов (variant types)?

Вариантные типы, также известные как алгебраические типы, предоставляют способ указать, что значение может принимать один из множества других типов, но только те типы, которые входят в это множество. Типичным примером в системном программировании было бы указать, что ошибка (например, ошибка сети, ошибка безопасности или ошибка приложения) позволяет вызывающему абоненту определить источник проблемы, изучив тип ошибки. Другой пример - синтаксическое дерево, в котором каждый узел может быть другого типа: объявление, оператор, назначение и так далее.

Создатели Go рассмотрели добавление вариантных типов в Go, но после обсуждения решили оставить их, потому что они пересекаются с интерфейсами. Что будет, если элементы вариантного типа будут сами интерфейсами?

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


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


Комментариев нет:

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