Гарантируется ли порядок элементов в слайсе (slice) в Go?

Ответ

Да, порядок элементов в слайсе гарантирован.

Слайс в Go — это дескриптор, который представляет собой непрерывный сегмент базового массива. Поскольку элементы в массиве расположены в памяти последовательно, порядок элементов в слайсе строго определён и соответствует их индексам — от 0 до len(s)-1.

При итерации по слайсу с помощью цикла for...range элементы всегда возвращаются в порядке их индексов.

Пример:

s := []string{"a", "b", "c"}

// Элементы будут напечатаны в порядке: 0 a, 1 b, 2 c
for i, v := range s {
    fmt.Println(i, v)
}

Важное отличие: В отличие от слайсов, порядок итерации по элементам map не гарантирован. Если вам нужна упорядоченная коллекция ключ-значение, следует использовать слайс ключей для итерации по мапе в нужном порядке.