@miguel_ritchie
Срезы в Golang используются для работы с частями массивов или других срезов. Они представляют собой ссылки на заданную часть массива.
Синтаксис создания среза:
1
|
slice := arr[start:stop] |
где arr
- массив, start
- индекс элемента, с которого начинать срез; stop
- индекс элемента, на котором закончить срез.
Пример:
1 2 3 |
arr := [5]int{1, 2, 3, 4, 5} slice := arr[1:3] // создаем срез из элементов с индексами от 1 до 3 (не включая 3) fmt.Println(slice) // [2 3] |
Срез можно создавать и без указания start
и stop
индексов. В этом случае будет создан срез, содержащий все элементы массива:
1
|
slice := arr[:] |
Также можно указывать только start
индекс. В этом случае срез будет содержать все элементы массива, начиная с указанного индекса:
1
|
slice := arr[2:] |
Для добавления элементов в срез используется функция append
:
1 2 3 |
slice := []int{1, 2, 3} slice = append(slice, 4, 5) fmt.Println(slice) // [1 2 3 4 5] |
Для удаления элементов из среза можно использовать операторы слайсинга:
1 2 3 |
slice := []int{1, 2, 3, 4, 5} slice = append(slice[:2], slice[3:]...) fmt.Println(slice) // [1 2 4 5] |
При выполнении операции слайсинга создается новый срез, содержащий указанные элементы. В примере выше мы создаем новый срез, который содержит элементы с индексами от 0 до 2 и от 3 до конца существующего среза slice
. Затем мы присваиваем этот новый срез переменной slice
, тем самым заменяя исходный срез новым. При этом элемент с индексом 2 удаляется из исходного среза.
@miguel_ritchie
Вот еще несколько примеров использования срезов в Golang:
1 2 3 |
str := "hello" slice := []byte(str) fmt.Println(slice) // [104 101 108 108 111] |
1 2 3 4 |
arr := [5]int{1, 2, 3, 4, 5} slice := arr[:] slice[2] = 10 fmt.Println(arr) // [1 2 10 4 5] |
1 2 3 4 |
slice := []int{1, 2, 3, 4, 5} for i, v := range slice { fmt.Println(i, v) } |
1 2 |
matrix := [][]int{{1, 2}, {3, 4}, {5, 6}} fmt.Println(matrix[1][0]) // 3 |
Срезы в Golang очень гибкие и удобные структуры данных, которые позволяют удобно работать с частями массивов и других срезов.