Функция slices.Grow

Функция slices.Grow увеличивает емкость слайса до указанного размера. Она принимает два параметра: слайс, который нужно увеличить, и целое число - необходимую емкость. Функция возвращает новый слайс с увеличенной емкостью. Если требуемая емкость меньше или равна текущей, функция возвращает исходный слайс без изменений.

Синтаксис

goslices.Grow(slice, size)

Пример

Давайте увеличим емкость слайса до 10 элементов:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  s := []int{1, 2, 3}
  fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))

  s = slices.Grow(s, 10)
  fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
}

Результат выполнения кода:

go"Length: 3, Capacity: 3"
"Length: 3, Capacity: 10"

Пример

Давайте проверим, что функция не изменяет слайс, если требуемая емкость меньше текущей:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  s := make([]string, 3, 5)
  s[0] = "a"
  s[1] = "b"
  s[2] = "c"
  fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))

  s = slices.Grow(s, 2)
  fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
}

Результат выполнения кода:

go"Length: 3, Capacity: 5"
"Length: 3, Capacity: 5"

Пример

Давайте используем slices.Grow для подготовки слайса к добавлению большого количества элементов:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  s := make([]int, 0, 2)
  fmt.Printf("Initial length: %d, capacity: %d\n", len(s), cap(s))

  s = slices.Grow(s, 100)
  fmt.Printf("After grow length: %d, capacity: %d\n", len(s), cap(s))

  for i := 0; i < 50; i++ {
    s = append(s, i)
  }
  fmt.Printf("After append length: %d, capacity: %d\n", len(s), cap(s))
}

Результат выполнения кода:

go"Initial length: 0, capacity: 2"
"After grow length: 0, capacity: 100"
"After append length: 50, capacity: 100"

Смотрите также

  • функцию len,
    которая возвращает длину слайса
  • функцию cap,
    которая возвращает емкость слайса
  • функцию slices.Clone,
    которая создает копию слайса
  • функцию slices.Clip,
    которая уменьшает емкость слайса до его длины