Что выведет код 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 ошибок.
Предыдущий вопрос
Что выведет Go: errors.Is и errors.As по цепочке
Следующий вопрос
Что выведет Go: defer при панике и повторная паника