好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang panic及處理機制

golang panic及處理機制

熱門標簽:開通400電話申請流程 智能語音電銷的機器人 百度地圖標注位置網站 武漢百應人工智能電銷機器人 如何利用高德地圖標注家 揚州電銷外呼系統軟件 400手機電話免費辦理 電腦外呼系統輻射大嗎 上海企業外呼系統排名

一 panic機制

  panic會將這個異常不斷向上拋出,直到有地方處理它,如果有處理,則不會再向上拋出。倘若沒有處理,那么最終會導致main掛掉.

 golang雖然沒有try catch機制,卻有一種類似的recover機制,后續demo我們可以觀測到它的用法和作用

二 實例   

2.1 main用recover

func main() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("err:", err)
        }
    }()
    go test1()
    time.Sleep(time.Second * 3)
    panic(errors.New("stop test1"))
    log.Println("123")
    select {}
}
func test1() {
    for {
        tm := time.NewTicker(time.Second)
        select {
        case -tm.C:
            log.Println("test1")
        }
    }
}

2.2 func用recover

func main() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("err:", err)
        }
    }()
    go test1()
    time.Sleep(time.Second * 3)
    makeerr()
    log.Println("123")
    select {}
}
 
func test1() {
    for {
        tm := time.NewTicker(time.Second)
        select {
        case -tm.C:
            log.Println("test1")
        }
    }
}
func makeerr() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("makeerr:", err)
        }
    }()
    panic(errors.New("stop"))
}

此時我們在func中用recover,那么掛掉的只是func,他不會拋到main中,所以main能繼續運行,繼而main開辟的go test1也能繼續運行

2.3 func用recover且開創goroutine

func main() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("err:", err)
        }
    }()
 
    time.Sleep(time.Second * 3)
    makeerr()
    log.Println("123")
    select {}
}
 
func test1() {
    for {
        tm := time.NewTicker(time.Second)
        select {
        case -tm.C:
            log.Println("test1")
        }
    }
}
func makeerr() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("makeerr err:", err)
        }
    }()
    go test1()
    panic(errors.New("stop test"))
}

我們發現,func雖然掛掉了,但是他開創的go沒掛掉,因為即使是這個函數退出了,新開的協程是相當于基于main下的一個子程,只要main不退出,他依然會“存活”

2.4 goroutine中panic

func main() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("err:", err)
        }
    }()
    go test1()
    time.Sleep(time.Second * 3)
    log.Println("123")
    select {}
}
func test1() {
    log.Println("test1 start")
    panic(errors.New("stop test1"))
    log.Println("test1 end")
}

協程中如果沒recover,那么error就會拋向main,main就會掛掉,從而沒有執行到后面的log打印。

---> 這種情況,main中做defer recover是沒用的

2.5 func1內嵌func2中panic且func2做處理

func main() {
    test1()
    time.Sleep(time.Second * 3)
    log.Println("123")
}
func test1() {
    log.Println("test1 start")
    test2()
    log.Println("test1 end")
}
func test2() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("test2 err:", err)
        }
    }()
    log.Println("test2 start")
    panic(errors.New("stop test2"))
    log.Println("test2 end")
}

2.6 func1內嵌func中panic且func1做處理

func main() {
    test1()
    time.Sleep(time.Second * 3)
    log.Println("123")
}
func test1() {
    defer func() {
        if err := recover(); err != nil {
            log.Println("test? err:", err)
        }
    }()
    log.Println("test1 start")
    test2()
    log.Println("test1 end")
}
func test2() {
    log.Println("test2 start")
    panic(errors.New("stop test2"))
    log.Println("test2 end")
}

func2異常,執行終止,向調用者func1拋出進而本身退出,func1得到異常,執行終止,本身退出時recover進行處理,從而保活了main

到此這篇關于golang panic及處理機制的文章就介紹到這了,更多相關golang panic內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Golang捕獲panic堆棧信息的講解
  • Golang中異常處理機制詳解
  • GoLang 逃逸分析的機制詳解
  • 深入理解golang的異常處理機制

標簽:黑龍江 宜賓 張掖 江西 新余 延邊 嘉峪關 武漢

巨人網絡通訊聲明:本文標題《golang panic及處理機制》,本文關鍵詞  golang,panic,及,處理,機制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang panic及處理機制》相關的同類信息!
  • 本頁收集關于golang panic及處理機制的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 新婚无套啪啪对白| 国产男女无套?观看91| 高校长白老师| www色综合| 国产又爽?又黄?App| 精品亚洲AV在线年码播放| 91免费精品国自产拍在线可以看| 国产一级强片在线观看| 色婷婷伊人| 搡老女人ⅩXXX搡老女人一视频| 国产精品老牛影院| 男女激烈进出动态图| a一级日本特黄aaa大片| 久久摸摸碰碰97网站| 手机免费电影网| 六月丁香中文字幕| 靠逼软件免费下载大全| 小sao货都湿奶头都硬| 啊~妻主~慢点~嗯~| 欧美孕交欧美大肚孕交| 97国产精品| 柳州莫菁4部未删减偷拍| 最猛烈婬乱少妇小说系列红楼梦| 99热这里只有免费国产精品| 磐石市| 秘密爱大尺度无删减视频| 婬荡的秘书呻吟k8在线观看| 狼色精品人妻在线视频网站| 久久黄色免费电影| 美剧天堂| 蜜芽国产AV尤物尤物在线| 国产91调教| 拍拍拍1000部18勿入未满| 国产一区在线观看视频| 国产免费爽爽视频免费可以看| 宝贝把腿开大让我添添你视频| 公之浮之中字5HD| 99re6在线视频免费精品| jizzjizz国产| 女人用牛鞭自慰| 国产精品无码一区二区红樱桃|