Ответ
Доступ к элементу массива (или среза) по индексу в 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-му.