Это функция в Голанге, которая использует defer для изменения именованного возвращаемого значения функции c().Постоянна, возвращаемая функцией, автоматически становится значением именованной возвращаемой переменной
package main
import "fmt"
func c() (i int) {
defer func() { }()
defer fmt.Println("our i is", i)
return 45
}
func main() {
fmt.Println(c())
}
Выход программы:
наш я есть 0
изменения анонимного FUNC() в коде
func c() (i int) {
defer func() { i = 1 }()
defer fmt.Println("our i is", i)
return 45
}
func main() {
fmt.Println(c())
}
Это приводит к выходу:
наш я есть 0
Похоже, что возвращаемое значение 45 копируется я не автоматически, если другое значение кладется внутри я. Но я не уверен на 100%, если это точная причина выхода
реверсивный порядок отчетности Defer также дает точно такой же вывод. Другое дело, почему именно постоянная 45 выдается в первый раз, но не во втором случае? –
@AdityaSanghi '45' выводится оператором' fmt.Println() 'в функции **' main() '**, а не' Println() 'в функции' c() '. '45' возвращается из' c() ', вот почему. – icza
Но почему он возвращает 1, когда я явно изменяю i (во втором примере кода). В принципе, я не понимаю, почему возвращаемые значения ведут себя по-разному в двух примерах кода. –