Go: два append к одному срезу и общий базовый массив

В данном коде происходит следующее:

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

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

В данном коде происходит следующее:

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

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

Условие

package main

import "fmt"

func main() { a := []int{1,2} a = append(a, 3) b := append(a, 4) c := append(a, 5)

fmt.Println(b)
fmt.Println(c)

}

Ответ

В данном коде происходит следующее:

is := []int{1, 2, 3, 4}
subis(is[2:3])
fmt.Println(is)

is[2:3] — это срез, содержащий один элемент: 3.

Функция subis принимает срез is []int и возвращает новый срез, который получается добавлением числа 5 к исходному срезу через append.

Однако в main результат вызова subis не присваивается обратно, поэтому исходный срез is не меняется.

Вывод будет:

[1 2 3 4]

Если бы мы сделали присваивание, например:

is = subis(is[2:3])

то is стал бы срезом [3 5].

Таким образом, в текущем коде is не изменяется, потому что результат append не сохраняется.

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

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

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

Подробнее