s := []int{1, 2, 3}; a := [3]int(s) (Go 1.20+)?Да, с 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) (без копирования, но с риском при изменении длины слайса).