🔴 Сложный · 3 очк. Массивы и слайсы
Скомпилируется ли: s := []int{1, 2, 3}; a := [3]int(s) (Go 1.20+)?
A Нет, слайс нельзя конвертировать в массив
B Да, a будет копией данных слайса
C Да, a будет ссылкой на слайс
D Panic при выполнении
Объяснение вопроса

Да, с Go 1.20 такая конвертация слайса в массив допустима: a := [3]int(s) создаёт массив [3]int и копирует в него первые 3 элемента слайса.

Условия

Длина слайса должна быть не меньше длины массива. Если len(s) < 3, во время выполнения произойдёт panic.

s := []int{1, 2, 3}
a := [3]int(s)   // a = [1, 2, 3], это копия
s[0] = 99
fmt.Println(a[0]) // 1 (a не изменился)

Зачем

Функции иногда принимают массив фиксированного размера (например, [32]byte для ключа). Раньше приходилось копировать вручную или использовать указатель на массив (*[3]int)(s) (без копирования, но с риском при изменении длины слайса).

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.