亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言panic和recover的用法實(shí)例

 更新時(shí)間:2024年01月12日 11:30:51   作者:飛翔的烏龜  
panic()和recover()是Go語(yǔ)言中用于處理錯(cuò)誤的兩個(gè)重要函數(shù),本文主要介紹了Go語(yǔ)言panic和recover的用法實(shí)例,panic()用于中止程序并引發(fā)panic,而recover()用于捕獲panic并恢復(fù)程序的執(zhí)行,感興趣的可以了解一下

panic() 和 recover() 是 Go 語(yǔ)言中用于處理錯(cuò)誤的兩個(gè)重要函數(shù)。panic() 函數(shù)用于中止程序并引發(fā)panic,而 recover() 函數(shù)用于捕獲panic并恢復(fù)程序的執(zhí)行。

什么是panic和recover?

panic

  • panic() 函數(shù)用于中止程序并引發(fā)panic。
  • panic() 函數(shù)可以接收一個(gè)參數(shù),該參數(shù)將作為panic的原因。
  • 當(dāng)發(fā)生panic時(shí),程序?qū)⑼V箞?zhí)行,并開始尋找最近的recover調(diào)用。
  • 如果找不到recover調(diào)用,程序?qū)⒋蛴anic的原因并退出。

recover

  • recover() 函數(shù)用于捕獲panic并恢復(fù)程序的執(zhí)行。
  • recover() 函數(shù)可以接收一個(gè)參數(shù),該參數(shù)將存儲(chǔ)panic的原因。
  • 如果在發(fā)生panic時(shí)調(diào)用了recover,程序?qū)⒗^續(xù)執(zhí)行,并且panic的原因?qū)⒈淮鎯?chǔ)在recover的第一個(gè)參數(shù)中。
func main() {
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("panic:", err)
        }
    }()

    panic("hello, panic!")
}

panic 的傳播

 panic 函數(shù)會(huì)向上傳播到調(diào)用它的 goroutine。如果 panic 函數(shù)沒有被捕獲,則會(huì)一直向上傳播,直到遇到 defer 語(yǔ)句中調(diào)用的 recover() 函數(shù),或者程序退出。

注意事項(xiàng)

跨協(xié)程失效

panic 和 recover 不能跨協(xié)程使用。這意味著在一個(gè)協(xié)程中發(fā)生的panic只能在同一個(gè)協(xié)程中通過(guò) recover 捕獲。如果在一個(gè)協(xié)程中發(fā)生了panic,而在另一個(gè)協(xié)程中調(diào)用了 recover,那么 recover 將無(wú)法捕獲panic。參考如下代碼:

func main() {
	defer println("in main")
	go func() {
		defer println("in goroutine")
		panic("")
	}()

	time.Sleep(1 * time.Second)
}

失效的崩潰恢復(fù)

如果在一個(gè)defer函數(shù)中發(fā)生了panic,那么該defer函數(shù)后面的語(yǔ)句將不會(huì)被執(zhí)行。這意味著在defer函數(shù)中使用 recover 來(lái)捕獲panic是無(wú)效的。

func main(){
    defer fmt.Println("main....")
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("panic:", err)
		}
	}()

	panic("hello, panic!")
}

嵌套崩潰

嵌套崩潰是指在一個(gè) goroutine 中調(diào)用 panic() 函數(shù),然后在 defer 語(yǔ)句中再次調(diào)用 panic() 函數(shù)。在這種情況下,panic() 函數(shù)會(huì)從內(nèi)向外傳播,直到程序崩潰。嵌套崩潰可能會(huì)導(dǎo)致程序不可用,因此應(yīng)避免使用。

func multiplePanic() {
	defer fmt.Println("in defer")
	defer func() {
		defer func() {
			panic("panic 3")
		}()
		panic("panic 2")
	}()
	panic("panic 1")
}

到此這篇關(guān)于Go語(yǔ)言panic和recover的用法實(shí)例的文章就介紹到這了,更多相關(guān)Go語(yǔ)言panic和recover內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言實(shí)現(xiàn)socket實(shí)例

    Go語(yǔ)言實(shí)現(xiàn)socket實(shí)例

    這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)socket的方法,實(shí)例分析了socket客戶端與服務(wù)器端的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Golang?PHP?數(shù)據(jù)綁定示例分析

    Golang?PHP?數(shù)據(jù)綁定示例分析

    這篇文章主要為大家介紹了Golang?PHP?數(shù)據(jù)綁定示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • go編程中g(shù)o-sql-driver的離奇bug解決記錄分析

    go編程中g(shù)o-sql-driver的離奇bug解決記錄分析

    這篇文章主要為大家介紹了go編程中g(shù)o-sql-driver的離奇bug解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Golang switch語(yǔ)句的具體使用

    Golang switch語(yǔ)句的具體使用

    switch 語(yǔ)句提供了一種簡(jiǎn)潔的方式來(lái)執(zhí)行多路分支選擇,本文主要介紹了Golang switch語(yǔ)句的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • go語(yǔ)言編程二維碼生成及識(shí)別

    go語(yǔ)言編程二維碼生成及識(shí)別

    這篇文章主要為大家介紹了go語(yǔ)言編程二維碼的生成及識(shí)別示例演示,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • go解析YAML文件(多文檔解析)

    go解析YAML文件(多文檔解析)

    本文介紹了如何使用GO語(yǔ)言和client-go庫(kù)處理YAML文件,特別是在Kubernetes環(huán)境下,分析了YAML的特點(diǎn),如簡(jiǎn)潔性、易讀性、可嵌套性等,并展示了相關(guān)代碼實(shí)現(xiàn),包括單文檔和多文檔的處理方法,感興趣的可以了解一下
    2024-10-10
  • golang調(diào)用windows平臺(tái)的dll庫(kù)的方法實(shí)現(xiàn)

    golang調(diào)用windows平臺(tái)的dll庫(kù)的方法實(shí)現(xiàn)

    本文主要介紹了golang調(diào)用windows平臺(tái)的dll庫(kù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Go并發(fā)編程中sync/errGroup的使用

    Go并發(fā)編程中sync/errGroup的使用

    本文主要介紹了Go并發(fā)編程中sync/errGroup的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go語(yǔ)言結(jié)構(gòu)體定義和使用方法

    Go語(yǔ)言結(jié)構(gòu)體定義和使用方法

    這篇文章主要介紹了Go語(yǔ)言結(jié)構(gòu)體定義和使用方法,以實(shí)例形式分析了Go語(yǔ)言中結(jié)構(gòu)體的定義和使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問(wèn)題

    使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問(wèn)題

    這篇文章主要介紹了使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論