Можно ли итерироваться по `nil`-слайсу в Go?

Ответ

Да, можно. Итерация по nil-слайсу в Go — это абсолютно безопасная операция. Цикл for range просто не выполнит ни одной итерации, так как длина nil-слайса равна 0.

Это избавляет от необходимости делать предварительные проверки на nil перед циклом.

Пример с nil-слайсом:

var s []int // s == nil

// Этот код безопасен и не вызовет паники
for i, v := range s {
    // Тело цикла не будет выполнено
    fmt.Printf("Индекс: %d, Значение: %dn", i, v)
}
fmt.Println("Цикл завершен")

Важно отличать nil-слайс от пустого слайса. Пустой слайс — это слайс с длиной 0, но он указывает на существующий (хоть и пустой) базовый массив. Итерация по нему также безопасна и не выполнится ни разу.

Пример с пустым слайсом:

s := []int{} // s != nil, но len(s) == 0

for i, v := range s {
    // Тело цикла также не будет выполнено
    fmt.Printf("Индекс: %d, Значение: %dn", i, v)
}