Ограничения в GoLang (constraints) позволяют указать, какие типы данных могут быть использованы в дженериках. 3 Дженерики — это обобщённое программирование, которое позволяет единожды написать код, работающий с множеством разных типов, соответствующих заданным ограничениям. 1
Некоторые особенности работы ограничений:
- Перечисление подходящих типов. 1 Типы, подходящие под ограничение, перечисляются с помощью оператора «|». 14 Например, ограничение Ordered требует, чтобы тип был таким, что над ним задано отношение порядка. 1
- Префикс «~». 1 Он означает, что это может быть, например, не только string, но и любой тип, для которого string является базовым типом. 1
- Встроенные ограничения. 1 Например, comparable — встроенное в язык (начиная с версии 1.18) ограничение, захватывающее все типы, для которых уместны операторы сравнения. 1
- Работа для аргументов типа. 5 Вызывающий код должен передавать только такой аргумент типа, который удовлетворяет ограничению. 5 То есть аргумент типа должен реализовывать все методы, определённые ограничением. 5
Пример: нужно создать функцию, работающую с числами. 3 Без дженериков пришлось бы писать отдельные функции для int, float64 и так далее. 3 С дженериками и ограничениями можно сделать это одним махом. 3