В данном коде происходит следующее:
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 не сохраняется.