欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go語(yǔ)言的panic和recover函數(shù)用法實(shí)例

 更新時(shí)間:2019年04月02日 08:37:32   作者:stpeace  
今天小編就為大家分享一篇關(guān)于go語(yǔ)言的panic和recover函數(shù)用法實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

Golang 有2個(gè)內(nèi)置的函數(shù) panic()recover(),用以報(bào)告和捕獲運(yùn)行時(shí)發(fā)生的程序錯(cuò)誤,與 error 不同,panic-recover 一般用在函數(shù)內(nèi)部。一定要注意不要濫用 panic-recover,可能會(huì)導(dǎo)致性能問(wèn)題,我一般只在未知輸入和不可靠請(qǐng)求時(shí)使用。

golang 的錯(cuò)誤處理流程:當(dāng)一個(gè)函數(shù)在執(zhí)行過(guò)程中出現(xiàn)了異常或遇到 panic(),正常語(yǔ)句就會(huì)立即終止,然后執(zhí)行 defer 語(yǔ)句,再報(bào)告異常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函數(shù),則會(huì)捕獲錯(cuò)誤信息,使該錯(cuò)誤信息終止報(bào)告。

看代碼:

package main
import "fmt"
func main(){
  defer func(){
    fmt.Println("c")
    // if err := recover(); err != nil{
    //   fmt.Println(err)
    // }else{
    //   fmt.Println("hehe")
    // }
    // if err := recover(); err != nil{
    //   fmt.Println(err)
    // }else{
    //   fmt.Println("haha")
    // }
    fmt.Println("d")
  }()
  f()
  defer func(){
    fmt.Println("e")
  }()
}
func f(){
  fmt.Println("a")
  panic(10000)
  fmt.Println("b")
  fmt.Println("f")
}

結(jié)果:

ubuntu@VM-0-15-ubuntu:~/taoge/go$ go run test.go
a
c
d
panic: 10000
goroutine 1 [running]:
panic(0x4b8480, 0xc82000a2c0)
        /usr/lib/go-1.6/src/runtime/panic.go:481 +0x3e6
main.f()
        /home/ubuntu/taoge/go/test.go:34 +0x115
main.main()
        /home/ubuntu/taoge/go/test.go:25 +0x35
exit status 2
ubuntu@VM-0-15-ubuntu:~/taoge/go$

看代碼:

package main
import "fmt"
func main(){
  defer func(){
    fmt.Println("c")
    if err := recover(); err != nil{
      fmt.Println(err)
    }else{
      fmt.Println("hehe")
    }
    if err := recover(); err != nil{
      fmt.Println(err)
    }else{
      fmt.Println("haha")
    }
    fmt.Println("d")
  }()
  f()
  defer func(){
    fmt.Println("e")
  }()
}
func f(){
  fmt.Println("a")
  panic(10000)
  fmt.Println("b")
  fmt.Println("f")
}

結(jié)果:

ubuntu@VM-0-15-ubuntu:~/taoge/go$ go run test.go
a
c
10000
haha
d
ubuntu@VM-0-15-ubuntu:~/taoge/go$ 

好好體會(huì)下。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 一篇文章說(shuō)清楚?go?get?使用私有庫(kù)的方法

    一篇文章說(shuō)清楚?go?get?使用私有庫(kù)的方法

    這篇文章主要介紹了go?get?如何使用私有庫(kù),本文會(huì)明確指出Git?、golang的配置項(xiàng),附送TortoiseGit?+?Git混合配置,需要的朋友可以參考下
    2022-09-09
  • golang模擬實(shí)現(xiàn)帶超時(shí)的信號(hào)量示例代碼

    golang模擬實(shí)現(xiàn)帶超時(shí)的信號(hào)量示例代碼

    這篇文章主要給大家介紹了關(guān)于golang模擬實(shí)現(xiàn)帶超時(shí)的信號(hào)量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 使用go讀取gzip格式的壓縮包的操作

    使用go讀取gzip格式的壓縮包的操作

    這篇文章主要介紹了使用go讀取gzip格式的壓縮包的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • GO項(xiàng)目配置與使用的方法步驟

    GO項(xiàng)目配置與使用的方法步驟

    本文主要介紹了GO項(xiàng)目配置與使用的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • windows下安裝make及使用makefile文件

    windows下安裝make及使用makefile文件

    這篇文章主要為大家介紹了windows下安裝make及使用makefile文件方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 詳解Go語(yǔ)言中空結(jié)構(gòu)體的慣用法

    詳解Go語(yǔ)言中空結(jié)構(gòu)體的慣用法

    空結(jié)構(gòu)體在 Go 編程中有著廣泛的應(yīng)用,本文將詳細(xì)探討空結(jié)構(gòu)體的幾種典型用法,并解釋為何它們?cè)谔囟▓?chǎng)景下非常有用,希望對(duì)大家有所幫助
    2024-11-11
  • Golang利用Template模板動(dòng)態(tài)生成文本

    Golang利用Template模板動(dòng)態(tài)生成文本

    Go語(yǔ)言中的Go?Template是一種用于生成文本輸出的簡(jiǎn)單而強(qiáng)大的模板引擎,它提供了一種靈活的方式來(lái)生成各種格式的文本,下面我們就來(lái)看看具體如何使用Template實(shí)現(xiàn)動(dòng)態(tài)文本生成吧
    2023-09-09
  • golang如何設(shè)置Header Content-type

    golang如何設(shè)置Header Content-type

    這篇文章主要介紹了golang如何設(shè)置Header Content-type問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 如何使用go實(shí)現(xiàn)創(chuàng)建WebSocket服務(wù)器

    如何使用go實(shí)現(xiàn)創(chuàng)建WebSocket服務(wù)器

    文章介紹了如何使用Go語(yǔ)言和gorilla/websocket庫(kù)創(chuàng)建一個(gè)簡(jiǎn)單的WebSocket服務(wù)器,并實(shí)現(xiàn)商品信息的實(shí)時(shí)廣播,感興趣的朋友一起看看吧
    2024-11-11
  • 深入了解Golang中reflect反射的使用

    深入了解Golang中reflect反射的使用

    這篇文章主要介紹了深入了解Golang中reflect反射的使用,Go語(yǔ)言中的反射是一種機(jī)制,可以在運(yùn)行時(shí)動(dòng)態(tài)地獲取類型信息和操作對(duì)象,以及調(diào)用對(duì)象的方法和屬性等,需要詳細(xì)了解可以參考下文
    2023-05-05

最新評(píng)論