Я читаю спецификацию go и не до конца понимаю поведение примера для отсрочки.
// f returns 1
func f() (result int) {
defer func() {
result++
}()
return 0
}
Функция имеет именованный возврат, который анонимно откладываетсяприращение функции.Функция заканчивается "return 0".Это значение не возвращается, но вместо этого увеличивается значение переменной.
Пытаясь понять это поведение, я столкнулся с большим количеством вопросов.Если я присваиваю значение возвращаемой переменной, это, кажется, не влияет на возвращаемое значение.
//b returns 1
func b() (result int) {
result = 10
defer func() {
result++
}()
return 0
}
Однако, если последняя строка изменяется на:
return result
Вещиведите себя так, как я ожидал.
https://play.golang.org/p/732GZ-cHPqU
Может кто-нибудь помочь мне лучше понять, почему возвращаются эти значения и область действия этих функций.