Ответ
Доступ к элементу среза (slice) по индексу имеет константную временную сложность O(1).
Объяснение
Срез в Go — это легковесная структура, содержащая указатель на базовый массив, длину и ёмкость. Благодаря этому, для доступа к элементу по индексу не требуется перебор. Адрес элемента вычисляется напрямую по формуле:
address = start_address_of_array + index * size_of_element
Эта операция занимает одинаковое время независимо от размера среза.
s := []int{10, 20, 30, 40, 50}
// Прямой доступ к элементу с индексом 2
// Эта операция имеет сложность O(1)
val := s[2] // val будет равен 30
Ключевые моменты
- Паника при выходе за границы: Попытка доступа к элементу по индексу, который больше или равен длине среза (
index >= len(s)
), вызовет паникуruntime error: index out of range
. - Паника при
nil
срезе: Обращение по любому индексу к неинициализированному (nil
) срезу также приведет к панике.