Какова алгоритмическая сложность доступа к элементу массива (или среза) по индексу?

Ответ

Доступ к элементу массива (или среза) по индексу в Go, как для чтения, так и для записи, имеет алгоритмическую сложность O(1) (константное время).

Это возможно потому, что элементы хранятся в непрерывном блоке памяти. Адрес нужного элемента вычисляется мгновенно по формуле:
адрес_элемента = адрес_начала_массива + индекс * размер_одного_элемента

// Массив
arr := [3]int{10, 20, 30}
value := arr[1] // O(1) - прямое вычисление адреса

// Срез (slice)
slice := []int{10, 20, 30}
slice[1] = 25   // O(1) - срез под капотом ссылается на массив

Ключевой момент: время доступа не зависит от количества элементов в массиве или срезе. Доступ к 10-му элементу займет столько же времени, сколько и к 1,000,000-му.