Go имеет несколько встроенных универсальных типов данных, таких как срезы и карты, и некоторые универсальные функции, такие как append и copy. Тем не менее, нет механизма для написания собственных общих типов (дженериков).
Вот некоторые техники, которые можно использовать вместо параметрического полиморфизма в Go.
Найдите подходящий интерфейс
Опишите общее поведение ваших данных с помощью интерфейса.
Хороший пример - интерфейс io.Reader, который представляет конец потока данных для чтения:
- многие функции принимают io.Reader в качестве входных данных,
- и многие типы данных, включая файлы, сетевые подключения и шифры, реализуют этот интерфейс.
Используйте несколько функций
Если вам нужно поддерживать только несколько типов данных, рассмотрите возможность создания отдельной функции для каждого типа.
Например, два пакета strings и bytes имеют практически одинаковый набор функций.
Если это приводит к неуправляемому количеству копий и вставок, рассмотрите возможность использования инструмента генерации кода.
Используйте пустой интерфейс
Если о данных мало что известно, рассмотрите возможность использования пустого интерфейса interface{} в сочетании с утверждениями типа и, возможно, также отражением. Такие библиотеки, как fmt и encoding/json, не могли быть написаны другим способом.
Читайте также:
- Дженерики в Golang
- Go FAQ: Почему в Go нет универсальных типов (generics)?
- Объектно-ориентированное программирование с наследованием в Golang
Комментариев нет:
Отправить комментарий