может ли паническим восстановлением изменять локальные переменные в литералах функции?
в Go, при работе с именованными возвращающими значениями вы можете использовать оператор DEFE, чтобы изменить значения, прежде чем их возвращать. Однако это поведение не является согласованным при использовании локальных переменных в литералах функции. defer func () { Если e: = record (); e! = nil { Результат = -1 err = errors.new (e. (String)) } } () бар() результат = 100 err = nil возвращаться } func bar () { Паника («Паника случилась») }
Этот код работает, как и ожидалось, настройка результата -1 и ошибки в пользовательском сообщении об ошибке после восстановления после паники. Однако, если мы используем локальные переменные в буквальном языке, поведение изменяется:
func foo() (result int, err error) {
defer func() {
if e := recover(); e != nil {
result = -1
err = errors.New(e.(string))
}
}()
bar()
result = 100
err = nil
return
}
func bar() {
panic("panic happened")
}
В этом случае результат сброшен до 0 вместо -1. Это связано с тем, что оператор DEFER в функции литерала не может получить доступ или изменить именованные возвращаемые значения, поскольку они больше не находятся в области. Крайне важно использовать именованные возвращаемые значения при попытке изменить их, используя оператор DEFE в рамках буквальной функции. Локальные переменные в таких случаях не могут быть доступны или изменены.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3