Срезы
Срез — заголовок над массивом
Срез ([]T) — это структура из трёх полей: указатель на массив, длина (len) и ёмкость (cap). Срез не владеет данными — он смотрит на фрагмент массива.
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4] // [2 3 4], len=3, cap=4
Изменение элементов через срез изменяет исходный массив.
Создание среза
s := []int{10, 20, 30} // литерал
s2 := make([]int, 5) // len=5, cap=5, заполнен нулями
s3 := make([]int, 3, 10) // len=3, cap=10
append
append добавляет элементы. Если cap не хватает, создаётся новый массив вдвое большего размера:
s := []int{1, 2}
s = append(s, 3, 4)
fmt.Println(s) // [1 2 3 4]
other := []int{5, 6}
s = append(s, other...)
После append присваивайте результат обратно — функция может вернуть новый срез.
copy
copy копирует минимум из len(dst) и len(src) элементов:
src := []int{1, 2, 3}
dst := make([]int, 3)
n := copy(dst, src)
fmt.Println(dst, n) // [1 2 3] 3
Срезы срезов
s := []int{0, 1, 2, 3, 4}
fmt.Println(s[1:3]) // [1 2]
fmt.Println(s[:2]) // [0 1]
fmt.Println(s[3:]) // [3 4]
Упражнения
| № | Задание | Сложность |
|---|---|---|
| 1 | Упражнение 1 | easy |
| 2 | Упражнение 2 | easy |
| 3 | Упражнение 3 | medium |
| 4 | Упражнение 4 | medium |