Дженерик-структуры данных в Go
В этой статье мы рассмотрим двоичное дерево -- простейшую структуру данных, созданную на основе дженериков. Мы реализуем дерево с функцией сравнения, в результате чего требований по типу элементов не будет:
Итак, новое бинарное дерево создано. При этом наша функция сравнения передаётся функции New.
Неэкспортированный метод выполняет возврат указателя или слот, который содержит v, или на то место в дереве, где она и должна быть.
Детали в данном случае не слишком важны, так как перед нами простой пример, цель которого продемонстрировать, каким образом создаётся структура данных с применением дженериков.
Следующий код предназначен для проверки, содержит ли дерево значение:
А код ниже добавляет новое значение:
На что тут следует обратить внимание? Прежде всего, на тип аргумента E в аргументе node. Именно таким образом выглядит код структуры данных с применением дженериков. Видно, что он не особо отличается от обычного кода на Golang, разве что, местами появляются типы в виде аргументов.
Использовать такое дерево очень просто.
Именно так быть и должно. А вывод прост: разрабатывать структуры данных с дженериками немного сложнее, ведь вам чаще всего приходится четко определять аргументы с типами. При всем при этом, применение такого кода, как правило, не сложнее, чем работа с традиционными структурами данных.
По материалам статьи Why Generics?