Проверяет знание безопасных и опасных операций с nil-срезом.
У nil-среза можно вызывать len(), cap(), append() и range — все работают корректно. Нельзя обращаться по индексу (s[i]) — это panic. Также методы, работающие только с метаданными (copy(dst, s)) безопасны.
Безопасно:
len(nilSlice) == 0, cap(nilSlice) == 0.
nilSlice = append(nilSlice, elems…) — аллоцирует.
for _, v := range nilSlice { … } — ничего не делает.
copy(dst, nilSlice) — возвращает 0.
Небезопасно:
nilSlice[i] — panic.
nilSlice[low:high] — panic, потому что high>0 и cap=0.
Пример:
var s []int
fmt.Println(len(s), cap(s)) // 0 0
s = append(s, 10) // [10]