Как использовать срезы в Golang?

Пользователь

от miguel_ritchie , в категории: Golang , 2 года назад

Как использовать срезы в Golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от elian.swift , 2 года назад

@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 удаляется из исходного среза.

Пользователь

от cloyd , 6 месяцев назад

@miguel_ritchie 

Вот еще несколько примеров использования срезов в Golang:

  1. Создание среза из строки:
1
2
3
str := "hello"
slice := []byte(str)
fmt.Println(slice) // [104 101 108 108 111]


  1. Использование среза для изменения значений в массиве:
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. Перебор среза с помощью цикла for:
1
2
3
4
slice := []int{1, 2, 3, 4, 5}
for i, v := range slice {
    fmt.Println(i, v)
}


  1. Создание многомерного среза:
1
2
matrix := [][]int{{1, 2}, {3, 4}, {5, 6}}
fmt.Println(matrix[1][0]) // 3


Срезы в Golang очень гибкие и удобные структуры данных, которые позволяют удобно работать с частями массивов и других срезов.