Go語(yǔ)言使用defer+recover解決panic導(dǎo)致程序崩潰的問(wèn)題
案例:如果我們起了一個(gè)協(xié)程,但這個(gè)協(xié)程出現(xiàn)了panic,但我們沒(méi)有捕獲這個(gè)協(xié)程,就會(huì)造成程序的崩潰,這時(shí)可以在goroutine中使用recover來(lái)捕獲panic,進(jìn)行處理,這樣主線程不會(huì)受到影響。
代碼如下:
package main
import (
"fmt"
"time"
)
func sayHello() {
for i := 0; i < 10; i++ {
time.Sleep(time.Second)
fmt.Println("hello world")
}
}
func test() {
//使用 defer + recover
defer func() {
//捕獲test拋出的panic
if err := recover();err!=nil{
fmt.Println("test發(fā)生錯(cuò)誤",err)
}
}()
//定義一個(gè)map
var myMap map[int]string
myMap[0] = "golang" //error
}
func main() {
go sayHello()
go test()
for i := 0; i < 10; i++ {
fmt.Println("main() ok=",i)
time.Sleep(time.Second)
}
}
執(zhí)行結(jié)果如下圖:

到此這篇關(guān)于Go語(yǔ)言使用defer+recover解決panic導(dǎo)致程序崩潰的問(wèn)題的文章就介紹到這了,更多相關(guān)Go panic程序崩潰內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人
這篇文章主要為大家介紹了Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人實(shí)現(xiàn)過(guò)程詳解,本文將通過(guò)最新的gemini?go?sdk來(lái)實(shí)現(xiàn)命令行聊天機(jī)器人2023-12-12
Go實(shí)現(xiàn)分布式系統(tǒng)高可用限流器實(shí)戰(zhàn)
這篇文章主要為大家介紹了Go實(shí)現(xiàn)分布式系統(tǒng)高可用限流器實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Go語(yǔ)言使用Redis和Etcd實(shí)現(xiàn)高性能分布式鎖
這篇文章主要為大家介紹了Go語(yǔ)言使用Redis實(shí)現(xiàn)高性能分布式鎖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
GORM框架實(shí)現(xiàn)分頁(yè)的示例代碼
本文主要介紹了GORM框架實(shí)現(xiàn)分頁(yè)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
深入了解Go語(yǔ)言的基本語(yǔ)法與常用函數(shù)
這篇文章主要為大家詳細(xì)介紹一下Go語(yǔ)言中的基本語(yǔ)法與常用函數(shù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下2022-07-07
詳解golang中make與new的異同點(diǎn)和用法
這篇文章將給大家介紹了go語(yǔ)言中函數(shù)new與make的使用和區(qū)別,關(guān)于go語(yǔ)言中new和make是內(nèi)建的兩個(gè)函數(shù),主要用來(lái)創(chuàng)建分配類(lèi)型內(nèi)存,文中通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-01-01

