Что выведет код Junior Слайсы и мапы изнутри спрашивают часто обновлено

Что выведет Go: изменение элемента и append в функции

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23.

package main

import "fmt"

func change(s []int) {
    s[0] = 9
    s = append(s, 4)
    s[1] = 8
}

func main() {
    s := []int{1, 2, 3}
    change(s)
    fmt.Println(s)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: [9 2 3]. В функцию копируется заголовок, массив общий. s[0] = 9 меняет общий массив.

Что выведет

[9 2 3]

Разбор

В функцию копируется заголовок, массив общий. s[0] = 9 меняет общий массив. Ёмкость 3, поэтому append создаёт новый массив, и s[1] = 8 пишет уже в него. Снаружи видно только первое изменение.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.