Что выведет код Middle Ошибки, defer, panic и recover спрашивают часто обновлено

Что выведет Go: defer и именованные результаты

Вопрос

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

package main

import "fmt"

func a() (n int) {
    defer func() { n++ }()
    return 5
}

func b() int {
    n := 5
    defer func() { n++ }()
    return n
}

func c() (n int) {
    defer func(n int) { n++ }(n)
    n = 7
    return n
}

func main() {
    fmt.Println(a(), b(), c())
}

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

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

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

Коротко

Код выведет: 6 5 7. a: return 5 записывает 5 в именованный n, defer увеличивает его до 6. b: результат безымянный, return n копирует 5 в слот результата, а defer меняет локальную n. c: в defer передана копия n (0) как аргумент, изменение копии ни на что не…

Что выведет

6 5 7

Разбор

a: return 5 записывает 5 в именованный n, defer увеличивает его до 6. b: результат безымянный, return n копирует 5 в слот результата, а defer меняет локальную n. c: в defer передана копия n (0) как аргумент, изменение копии ни на что не влияет.

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

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

Термины по теме