Срезы (slices) в GO

НАВИГАЦИЯ ПО СТРАНИЦЕ

Создание среза Операции срезов Многомерные срезы

Срезы (slices) в GO — это динамические структуры данных, представляющие собой фрагмент массива. В отличие от массивов, срезы не имеют фиксированной длины и предоставляют более удобные возможности для работы с коллекциями данных.

Создание среза

Срез можно создать, указав диапазон элементов из существующего массива или с помощью встроенной функции make.

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

    package main
    
    import "fmt"
    
    func main() {
        // Создание среза из массива
        numbers := [5]int{1, 2, 3, 4, 5}
        slice := numbers[1:4]  // Срез содержит элементы с индексами 1, 2, 3
        fmt.Println(slice)     // Вывод: [2 3 4]
    }
  2. Создание среза с использованием функции make:

    package main
    
    import "fmt"
    
    func main() {
        // Создание среза с использованием функции make
        slice := make([]int, 3)  // Срез с длиной 3 и емкостью 3
        fmt.Println(slice)       // Вывод: [0 0 0]
    }

Операции срезов

  1. Добавление элементов в срез:

    package main
    
    import "fmt"
    
    func main() {
        slice := []int{1, 2, 3}
    
        // Добавление элемента в конец среза
        slice = append(slice, 4)
        fmt.Println(slice)  // Вывод: [1 2 3 4]
    
        // Добавление нескольких элементов в конец среза
        slice = append(slice, 5, 6)
        fmt.Println(slice)  // Вывод: [1 2 3 4 5 6]
    }
  2. Изменение существующих элементов среза:

    package main
    
    import "fmt"
    
    func main() {
        slice := []int{1, 2, 3, 4, 5}
    
        // Изменение элемента среза
        slice[2] = 10
        fmt.Println(slice)  // Вывод: [1 2 10 4 5]
    }
  3. Удаление элементов из среза:

    package main
    
    import "fmt"
    
    func main() {
        slice := []int{1, 2, 3, 4, 5}
    
        // Удаление элемента среза по индексу
        indexToRemove := 2
        slice = append(slice[:indexToRemove], slice[indexToRemove+1:]...)
        fmt.Println(slice)  // Вывод: [1 2 4 5]
    }

Многомерные срезы

GO также поддерживает многомерные срезы:

package main

import "fmt"

func main() {
    // Многомерный срез
    matrix := [][]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }
    fmt.Println(matrix)
    // Вывод:
    // [[1 2 3]
    //  [4 5 6]
    //  [7 8 9]]
}

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