Дженерик-структуры данных в Go

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

Итак, новое бинарное дерево создано. При этом наша функция сравнения передаётся функции New.

Неэкспортированный метод выполняет возврат указателя или слот, который содержит v, или на то место в дереве, где она и должна быть.

Детали в данном случае не слишком важны, так как перед нами простой пример, цель которого продемонстрировать, каким образом создаётся структура данных с применением дженериков.

Следующий код предназначен для проверки, содержит ли дерево значение:

А код ниже добавляет новое значение:

На что тут следует обратить внимание? Прежде всего, на тип аргумента E в аргументе node. Именно таким образом выглядит код структуры данных с применением дженериков. Видно, что он не особо отличается от обычного кода на Golang, разве что, местами появляются типы в виде аргументов.

Использовать такое дерево очень просто.

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

По материалам статьи Why Generics?