Рубрики

Как добавить ломтик в Голанге?

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

Синтаксис:

func append(s []T, x ...T) []T

Здесь эта функция принимает срез s, а x… T означает, что эта функция принимает переменное число аргументов для параметра x . Такой тип функции также известен как переменная функция.

Если срез поддерживается массивом, а массивы имеют фиксированную длину, то как это возможно, срез имеет динамическую длину?

Что ж, ответ таков: когда новые элементы добавляются к срезу, создается новый массив. Теперь элементы, присутствующие в существующем массиве, копируются в новый массив и возвращают новую ссылку на этот массив (новый массив). Таким образом, из-за этого емкость среза будет вдвое больше старой емкости (как показано в примере 1). Но если существующий срез имеет достаточную емкость для хранения новых элементов, то новый массив не создается и элементы сохраняются в существующем базовом массиве (как показано в примере 2).

Пример 1:

// Перейти к программе, чтобы проиллюстрировать
// концепция добавления ломтиков.
package main

  
import (

    "fmt"

)

  
func main() {

  

    // Создание и инициализация среза

    // Использование стенографического объявления

    s1 := []int{234, 567, 7890, 1234, 234}

    s2 := []string{"Geeks", "For", "Geeks"}

  

    // Отображение фрагментов с

    // их длина и вместимость

    fmt.Println("Slice_1: ", s1)

    fmt.Println("Length of Slice_1: ", len(s1))

    fmt.Println("Capacity of Slice_1: ", cap(s1))

    fmt.Println()

    fmt.Println("Slice_2: ", s2)

    fmt.Println("Length of Slice_2: ", len(s2))

    fmt.Println("Capacity of Slice_2: ", cap(s2))

  

    // Добавление фрагментов

    // Использование функции append ()

    res1 := append(s1, 1000)

    res2 := append(s2, "GFG")

  

    // Отображение результатов

    fmt.Println()

    fmt.Println("New slice_1: ", res1)

    fmt.Println("New length of slice_1: ", len(res1))

    fmt.Println("New capacity of slice_1: ", cap(res1))

    fmt.Println()

    fmt.Println("New slice_2: ", res2)

    fmt.Println("New length of slice_2: ", len(res2))

    fmt.Println("New capacity of slice_2: ", cap(res2))

}

Выход:

Slice_1:  [234 567 7890 1234 234]
Length of Slice_1:  5
Capacity of Slice_1:  5

Slice_2:  [Geeks For Geeks]
Length of Slice_2:  3
Capacity of Slice_2:  3

New slice_1:  [234 567 7890 1234 234 1000]
New length of slice_1:  6
New capacity of slice_1:  12

New slice_2:  [Geeks For Geeks GFG]
New length of slice_2:  4
New capacity of slice_2:  6

Пример 2:

// Перейти к программе, чтобы проиллюстрировать
// концепция добавления ломтиков.
package main

  

import "fmt"

  
func main() {

  

    // Создание и инициализация среза

    // Использование функции make ()

    // Здесь 4 и 6 - длина

    // и емкость ломтика

    s1 := make([]int, 4, 6)

  

    // Копирование элементов в срез

    // Использование функции copy ()

    copy(s1, []int{123, 456, 789, 977})

  

    // Отображение среза

    fmt.Println("Slice : ", s1)

    fmt.Println("Length: ", len(s1))

    fmt.Println("Capacity: ", cap(s1))

  

    // Добавление фрагмента

    // Использование функции append ()

    s2 := append(s1, 3454, 678)

  

    // Отображение среза

    fmt.Println()

    fmt.Println("Slice : ", s2)

    fmt.Println("Length: ", len(s2))

    fmt.Println("Capacity: ", cap(s2))

  
}

Выход:

Slice :  [123 456 789 977]
Length:  4
Capacity:  6

Slice :  [123 456 789 977 3454 678]
Length:  6
Capacity:  6

Добавление к нулевому срезу: поскольку мы знаем, что тип среза с нулевым значением равен нулю, а емкость и длина среза такого типа равна 0. Но с помощью функции добавления можно добавлять значения к нулевому срезу.

Пример:

// Перейти к программе, чтобы проиллюстрировать
// концепция добавления к нулевому срезу.
package main

  

import "fmt"

  
func main() {

  

    // Создание нулевого среза

    var s1 []int

  

    // Отображение среза

    fmt.Println("Slice : ", s1)

    fmt.Println("Length: ", len(s1))

    fmt.Println("Capacity: ", cap(s1))

  

    // добавление к нулевому фрагменту

    // Использование функции append ()

    s2 := append(s1, 89, 45, 67, 23)

  

    // Отображение среза

    fmt.Println()

    fmt.Println("Slice : ", s2)

    fmt.Println("Length: ", len(s2))

    fmt.Println("Capacity: ", cap(s2))

  
}

Выход:

Slice :  []
Length:  0
Capacity:  0

Slice :  [89 45 67 23]
Length:  4
Capacity:  4

Присоединение к другому фрагменту с помощью оператора…. Вы можете добавить один фрагмент к другому с помощью оператора .

Пример:

// Перейти к программе, чтобы проиллюстрировать концепцию
// добавление к другому фрагменту.
package main

  

import "fmt"

  
func main() {

  

    // Создание и инициализация среза

    // Использование стенографического объявления

    s1 := []int{234, 567, 7890, 1234, 234}

    s2 := []int{10, 100, 1000, 10000}

  

    // Отображение ломтиков с их

    // длина и вместимость

    fmt.Println("Slice_1: ", s1)

    fmt.Println("Length of Slice_1: ", len(s1))

    fmt.Println("Capacity of Slice_1: ", cap(s1))

      

    fmt.Println()

      

    fmt.Println("Slice_2: ", s2)

    fmt.Println("Length of Slice_2: ", len(s2))

    fmt.Println("Capacity of Slice_2: ", cap(s2))

  

    // добавление к другому фрагменту

    // Использование функции append ()

    res1 := append(s1, s2...)

  

    // Отображение результата

    fmt.Println()

    fmt.Println("New slice_1: ", res1)

    fmt.Println("New length of slice_1: ", len(res1))

    fmt.Println("New capacity of slice_1: ", cap(res1))

  
}

Выход:

Slice_1:  [234 567 7890 1234 234]
Length of Slice_1:  5
Capacity of Slice_1:  5

Slice_2:  [10 100 1000 10000]
Length of Slice_2:  4
Capacity of Slice_2:  4

New slice_1:  [234 567 7890 1234 234 10 100 1000 10000]
New length of slice_1:  9
New capacity of slice_1:  12

Рекомендуемые посты:

Как добавить ломтик в Голанге?

0.00 (0%) 0 votes