Встречается на 8% собеседований по Go

Как со слайсами работать

Работа со слайсами является важной частью, поскольку слайсы широко используются для работы с последовательностями данных. Давайте разберем, что такое слайсы, почему они важны, и как с ними работать, с примерами кода.

Что это такое?

Слайс — это динамическая последовательность элементов одного типа. В отличие от массивов, они имеют гибкий размер, который может изменяться во время выполнения программы. Основаны на массивах, но предоставляют гораздо более удобные возможности для работы с последовательностями данных.

Основные операции:

Существует несколько способов создания:

1. Создание слайса из массива:

text
    ```go
    arr := [5]int{1, 2, 3, 4, 5}
    slice := arr[1:4] // содержит элементы с индексами 1, 2, 3
    fmt.Println(slice) // [2 3 4]
    ```

2. Создание слайса с помощью встроенной функции `make`:

text
    ```go
    slice := make([]int, 5) // слайс из 5 элементов, инициализированных нулями
    fmt.Println(slice) // [0 0 0 0 0]
    ```

3. Создание слайса литералом:

text
    ```go
    slice := []int{1, 2, 3, 4, 5}
    fmt.Println(slice) // [1 2 3 4 5]
    ```

Изменение размера слайса

С помощью функции `append`:

text
```go
slice := []int{1, 2, 3}
slice = append(slice, 4, 5) // добавляем элементы 4 и 5 в конец слайса
fmt.Println(slice) // [1 2 3 4 5]
```

Доступ к элементам слайса и изменение их

Аналогичны работе с массивами:

text
```go
slice := []int{1, 2, 3}
fmt.Println(slice[1]) // 2
slice[1] = 20
fmt.Println(slice) // [1 20 3]
```

Итерация по слайсу

Выполняется с помощью цикла `for`:

text
```go
slice := []int{1, 2, 3, 4, 5}
for i, v := range slice {
    fmt.Printf("Index: %d, Value: %d\n", i, v)
}
```

Копирование 

Для этого используется функция `copy`:

text
```go
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)
fmt.Println(dst) // [1 2 3]
```

Особенности 

  • Емкость и длина: Он имеет два атрибута: длину (количество элементов) и емкость (максимальное количество элементов, которое может быть размещено без выделения новой памяти).
text
    ```go
    slice := make([]int, 3, 5) // длина 3, емкость 5
    fmt.Println(len(slice)) // 3
    fmt.Println(cap(slice)) // 5
    ```
  • Срез (slicing): Можно создавать новые слайсы из существующих.
text
    ```go
    slice := []int{1, 2, 3, 4, 5}
    newSlice := slice[1:4]
    fmt.Println(newSlice) // [2 3 4]
    ```

Слайсы — это гибкие и удобные структуры данных для работы с последовательностями элементов. Они обеспечивают простое создание, изменение размера, доступ к элементам и итерацию по ним. Благодаря встроенным функциям, таким как `append` и `copy`, работа со слайсами становится ещё проще.

June 2, 2024, easyoffer

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы