Я только начал изучать golang, и я запутался в одном примере об использовании defer для изменения имени возвращаемого значения в сообщении блога golang здесь
В примере говорится
- Отложенные функции могут читать и присваивать возвращаемой функции с именами возвращаемых значений.
В этом примере отложенная функция увеличивает возвращаемое значение я после возвращения функции окружения. Таким образом, эта функция возвращает 2:
func c() (i int) {
defer func() { i++ }()
return 1
}
Но как то, что я узнал frmm A Tour of Go - Именованные возвращаемые значения
Возвращаемый оператор без аргументов возвращает именованные возвращаемые значения. Это называется "голым" возвратом.
Я тестировал в следующем коде и в функции b он возвращает 1, потому что это не был оператор возврата без аргументов, упомянутый выше.
func a() (i int) { // return 2
i = 2
return
}
func b() (i int) { // return 1
i = 2
return 1
}
Итак, мой вопрос находится в первом примере, окружающая функция c имеет именованное возвращаемое значение i, но функция c использует return 1, которая во втором примере может видеть, что она должна иметь return 1 независимо от того, какое значение я есть. Но почему после я изменений в отложенной функции функция c возвращает значение я вместо значения 1?
Когда я вводил свой вопрос, я, возможно, догадался об ответе. Это потому, что
return 1
равно
i = 1
return
в функции с именованной переменной возвращаемого значения i?
Пожалуйста, помогите мне подтвердить, спасибо!