Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: slice, append, capacity

Насколько увеличивается слайс при append?

Вопрос проверяет понимание работы с динамическими структурами данных в Go, в частности, как происходит изменение размера слайсов при добавлении элементов.

Короткий ответ

При добавлении элементов с помощью append слайс увеличивается по мере необходимости. Если текущей емкости недостаточно, выделяется новый массив, обычно с увеличением емкости в 2 раза. Это делает операцию добавления эффективной в большинстве случаев, но может привести к перерасходу памяти.

Длинный ответ

1. Как работает append:

  • Слайсы в Go — это динамические структуры данных, которые содержат ссылку на массив.

  • Если текущая емкость (cap) слайса позволяет, новый элемент добавляется в существующий массив.

  • Если емкости недостаточно, создается новый массив, размер которого больше старого, и данные копируются в него.


 

2. Пример кода:

package main

import "fmt"

func main() {
    	s := make([]int, 2, 2) // Длина 2, емкость 2
    	s[0], s[1] = 1, 2

    	fmt.Printf("Before append: len=%d, cap=%d\n", len(s), cap(s))

    	s = append(s, 3) // Увеличивает емкость
    	fmt.Printf("After append: len=%d, cap=%d\n", len(s), cap(s)) // Емкость увеличивается до 4
}

Вывод:

Before append: len=2, cap=2
After append: len=3, cap=4

 

3. Увеличение емкости:

  • Для небольших массивов емкость обычно увеличивается в 2 раза.

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


 

4. В каких случаях использовать:

  • При работе с динамическими данными, где количество элементов заранее неизвестно.

  • Для оптимизации: если вы знаете, сколько данных потребуется, можно заранее задать емкость через make.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#slice

#append

#capacity

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.