Какой результат выведет программа? (пример 74)

Программа напечатает [4 5]. Укороченный срез a сохраняет вместимость 5, поэтому можно снова открыть элементы за его текущей длиной.

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

Что ответить на собеседовании

Программа напечатает [4 5]. Укороченный срез a сохраняет вместимость 5, поэтому можно снова открыть элементы за его текущей длиной.

Подробный разбор

Ответ с пояснениями

Условие

Что будет напечатано после выполнения следующей Go‑программы?

package main

import (
    "fmt"
)

func main(){
    a := []int{1,2,3,4,5}
    a = a[:3]
    b := a[3:]
    fmt.Println(b[:2])
}

Ответ

Программа напечатает [4 5]. Укороченный срез a сохраняет вместимость 5, поэтому можно снова открыть элементы за его текущей длиной.

После a = a[:3] длина a равна 3, вместимость — 5. Выражение a[3:] корректно: получается срез длины 0 и вместимости 2, начинающийся с четвёртого элемента исходного массива.

Затем b[:2] расширяет его до доступной вместимости и показывает 4 и 5. Это отличается от индексирования a[3], которое при длине 3 вызвало бы panic. Для запрета такого расширения при передаче данных можно ограничить capacity полным slice-выражением.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее