π¬ΠΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ recover Π² Go?
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
// ΠΠ»ΠΎΡ ΠΎ
func main() {
defer recover()
panicCode()
}
// ΠΡΡΡΠ΅
πΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ:
πΈΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ: Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Π½ΠΈΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠ°Π½ΠΈΠΊΡ, re
πΈΠΠ΅ΠΎΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: Π² Π΄Π΅ΠΌΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ , Π³Π΄Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, re
πΈΠΡΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ: Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , re
πΈΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ°: re
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
recover
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
, Π½ΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° defer
.// ΠΠ»ΠΎΡ ΠΎ
func main() {
defer recover()
panicCode()
}
// ΠΡΡΡΠ΅
func handlePanic() {
if panicInfo := recover(); panicInfo != nil {
fmt.Println(panicInfo)
}
}
func main() {
defer handlePanic()
panicCode()
}
πΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ:
πΈΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ: Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Π½ΠΈΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠ°Π½ΠΈΠΊΡ, re
cover ΠΌ
ΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.πΈΠΠ΅ΠΎΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: Π² Π΄Π΅ΠΌΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ , Π³Π΄Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, re
cover ΠΌ
ΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡ ΡΠ±ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΡ.πΈΠΡΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ: Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , re
cover ΠΌ
ΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠ°Π½ΠΈΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠΊΠ°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ
.πΈΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ°: re
cover ΠΌ
ΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠ° ΠΏΠ°Π½ΠΈΠΊΠΈ, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠ°Π½ΠΈΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠΎΠ³ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ°Π±ΠΎΡΡ.