вторник, 12 мая 2020 г.

Дженерики в Golang (альтернативы и обходные пути)

Go имеет несколько встроенных универсальных типов данных, таких как срезы и карты, и некоторые универсальные функции, такие как append и copy. Тем не менее, нет механизма для написания собственных общих типов (дженериков).

Вот некоторые техники, которые можно использовать вместо параметрического полиморфизма в Go.

Найдите подходящий интерфейс

Опишите общее поведение ваших данных с помощью интерфейса.

Хороший пример - интерфейс io.Reader, который представляет конец потока данных для чтения:

  • многие функции принимают io.Reader в качестве входных данных,
  • и многие типы данных, включая файлы, сетевые подключения и шифры, реализуют этот интерфейс.

Используйте несколько функций

Если вам нужно поддерживать только несколько типов данных, рассмотрите возможность создания отдельной функции для каждого типа.

Например, два пакета strings и bytes имеют практически одинаковый набор функций.

Если это приводит к неуправляемому количеству копий и вставок, рассмотрите возможность использования инструмента генерации кода.

Используйте пустой интерфейс

Если о данных мало что известно, рассмотрите возможность использования пустого интерфейса interface{} в сочетании с утверждениями типа и, возможно, также отражением. Такие библиотеки, как fmt и encoding/json, не могли быть написаны другим способом.


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


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

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