«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как мы можем эффективно ограничить индексируемые типы в дженериках Go 1.18?

Как мы можем эффективно ограничить индексируемые типы в дженериках Go 1.18?

Опубликовано 19 ноября 2024 г.
Просматривать:165

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

Ограничения индексации в дженериках 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