Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goPmSlNE 142 of 350 menu
◀ ▶

Пустой срез и nil в Go

Срез без элементов бывает двух видов: еще не созданный и созданный пустым. В первом случае переменная объявлена с типом среза, но значение не задано: такой срез называют нулевым и обозначают словом nil. Его длина 0, элементов нет, обращаться к номерам нельзя, а перебор в цикле безопасен.

var emptyNil []int fmt.Println(len(emptyNil)) fmt.Println(emptyNil == nil) made := []int{} fmt.Println(len(made)) fmt.Println(made == nil)

Пустой, но уже созданный срез записывают как []int{}: длина тоже 0, но он не равен nil. Сравнение с nil истинно только у нулевого среза. Проверим оба варианта:

Первые две строки покажут 0 и true, следующие снова 0 и false. Оба среза пусты для цикла, но только один из них nil.

Дан следующий код:

var data []int

Выведите длину и результат сравнения с nil.

Дан следующий код:

fresh := []int{}

Выведите длину и результат сравнения с nil.

Скажите, безопасен ли перебор нулевого среза целых в цикле.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить