Ограничения индексации в дженериках Go 1.18
С появлением дженериков в Go 1.18 разработчики получили возможность реализовывать алгоритмы, работающие с конкретными типы. Одним из общих требований является использование типов, поддерживающих индексацию, таких как массивы, срезы, карты и строки.
Индексируемое ограничение
Чтобы ограничить параметр типа индексируемыми типами , рассмотрите возможность использования следующего ограничения с объединением:
type Indexable interface {
~[]byte | ~string
}
Ограничения индексируемого ограничения
Хотя указанное выше ограничение работает для индексации байтов и строк, существуют ограничения на его использование с другими индексируемыми типами, такими как карты и массивы. :
Альтернативный подход
Из-за этих ограничений единственным практическим объединением, поддерживающим индексирование, является []байт | нить. Это объединение допускает операции индексирования, но не поддерживает операции с диапазонами, поскольку у него отсутствует основной тип.
Пример использования
В следующем примере показано, как использовать ограничение Indexable:
func GetAt[T Indexable](v T, i int) byte {
return v[i]
}
Эта функция принимает индексируемое значение и индекс и возвращает байт по указанному индексу.
Заключение
Хотя Go 1.18 предоставляет такой способ Чтобы ограничить типы индексируемыми типами с помощью объединения, ограничения этого ограничения означают, что оно практично только для ограниченного набора случаев использования, а именно индексирования байтов и строки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3