πŸ’¬Π“Π΄Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ встроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ recover Π² Go?



ВстроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ recover Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… функциях, Π½ΠΎ Π½Π΅ рСкомСндуСтся Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова defer.



// ΠŸΠ»ΠΎΡ…ΠΎ



func main() {

defer recover()



panicCode()

}



// Π›ΡƒΡ‡ΡˆΠ΅





func handlePanic() {

if panicInfo := recover(); panicInfo != nil {

fmt.Println(panicInfo)

}

}



func main() {

defer handlePanic()



panicCode()

}





πŸ“ŒΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ:



πŸ”ΈΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок: Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Π½ΠΈΠΊΠ° являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с внСшними рСсурсами ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Π½ΠΈΠΊΡƒ, recover ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ошибки вмСсто Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.



πŸ”ΈΠΠ΅ΠΎΡ‚Π»ΠΎΠΆΠ½ΠΎΠ΅ восстановлСниС: Π² Π΄Π΅ΠΌΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… прилоТСниях ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… процСссах, Π³Π΄Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ критичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, recover ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для обСспСчСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ врСмСнная ошибка Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ сбою систСмы.



πŸ”ΈΠžΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ: Π² опСрациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ обновлСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, recover ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для обнаруТСния ΠΏΠ°Π½ΠΈΠΊΠΈ ΠΈ выполнСния ΠΎΡ‚ΠΊΠ°Ρ‚Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ….



πŸ”ΈΠ›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°: recover ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΏΠ°Π½ΠΈΠΊΠΈ, логирования диагностичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ°Π½ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ стандартный процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.