最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang?中?recover()的使用方法

 更新時(shí)間:2022年04月19日 09:09:23   作者:sndapk  
這篇文章主要介紹了Guam與golang??recover()的使用方法,Recover?是一個(gè)Go語言的內(nèi)建函數(shù),可以讓進(jìn)入宕機(jī)流程中的?goroutine?恢復(fù)過來,下文更多相關(guān)資料需要的小伙伴可以參考一下

Recover 是一個(gè)Go語言的內(nèi)建函數(shù),可以讓進(jìn)入宕機(jī)流程中的 goroutine 恢復(fù)過來,recover 僅在延遲函數(shù) defer 中有效,在正常的執(zhí)行過程中,調(diào)用 recover 會(huì)返回 nil 并且沒有其他任何效果,如果當(dāng)前的 goroutine 陷入恐慌,調(diào)用 recover 可以捕獲到 panic 的輸入值,并且恢復(fù)正常的執(zhí)行。
通常來說,不應(yīng)該對(duì)進(jìn)入 panic 宕機(jī)的程序做任何處理,但有時(shí),需要我們可以從宕機(jī)中恢復(fù),至少我們可以在程序崩潰前,做一些操作,舉個(gè)例子,當(dāng) web 服務(wù)器遇到不可預(yù)料的嚴(yán)重問題時(shí),在崩潰前應(yīng)該將所有的連接關(guān)閉,如果不做任何處理,會(huì)使得客戶端一直處于等待狀態(tài),如果 web 服務(wù)器還在開發(fā)階段,服務(wù)器甚至可以將異常信息反饋到客戶端,幫助調(diào)試。

在其他語言里,宕機(jī)往往以異常的形式存在,底層拋出異常,上層邏輯通過try/catch 機(jī)制捕獲異常,沒有被捕獲的嚴(yán)重異常會(huì)導(dǎo)致宕機(jī),捕獲的異常可以被忽略,讓代碼繼續(xù)運(yùn)行。

Go語言沒有異常系統(tǒng),其使用 panic 觸發(fā)宕機(jī)類似于其他語言的拋出異常,recover 的宕機(jī)恢復(fù)機(jī)制就對(duì)應(yīng)其他語言中的 try/catch 機(jī)

Recover的用法:

defer可以讀取有名返回值

理論:如果不進(jìn)行recover,便會(huì)導(dǎo)致整個(gè)程序掛掉,

Recover()用法是:Recover()寫在defer中,并且在可能發(fā)生panic的地方之前,先調(diào)用此defer的東西(讓系統(tǒng)方法域結(jié)束時(shí),有代碼要執(zhí)行。)當(dāng)程序遇到panic的時(shí)候(當(dāng)然,也可以正常的調(diào)用出現(xiàn)的異常情況),系統(tǒng)將跳過后面的代碼,進(jìn)入defer,如果defer函數(shù)中recover(),則返回捕獲到的panic的值。

總結(jié):使用recover()捕捉panic異常的時(shí)候,則需要defer來讀取一個(gè)匿名函數(shù),

defer func(){
If err:=recover();err!=nil{//注意必須要判斷
打印捕捉的err內(nèi)容
}
}()//用來調(diào)用此匿名函數(shù)

package main

import (
“fmt”
“l(fā)og”
)

func tast2() {
fmt.Println(“sssssssss”)
}
func tast(x int) {
defer func() {
if err:=recover();err !=nil{
fmt.Println(err)
}

}()
var a [10]int
a[x]=1222
log.Println(a)
}
func main(){
tast(20)
tast2()
}

希望goroutine在函數(shù)執(zhí)行時(shí)不會(huì)因崩潰導(dǎo)致剩余程序運(yùn)行,同時(shí)設(shè)置一個(gè)默認(rèn)返回值

package main

import (
	"fmt"
	"time"
)

func calcRem(i int) (res int) {
	defer func() {
		if err := recover(); err != nil {
			fmt.Printf("error: %s\n", err)
			res = 999 //干擾輸出
		}
	}()

	res = 10 / (10 % i) //當(dāng)余數(shù)取余為0時(shí),res為0
	fmt.Printf("10 / (10 %% %d) = %d\n", i, res)
	return
}

func main() {
	resCH := make(chan int, 10)
	defer close(resCH)

	for i := 1; i <= 10; i++ {
		go func(i int) {
			res := calcRem(i)
			resCH <- res
		}(i)
		time.Sleep(time.Microsecond * 100)
	}
	time.Sleep(time.Second)
	fmt.Printf("ch len is: %d\n", len(resCH))
	for i := 1; i <= 10; i++ {
		res := <-resCH
		fmt.Println(res)
	}
}

output

error: runtime error: integer divide by zero
error: runtime error: integer divide by zero
10 / (10 % 3) = 10
10 / (10 % 4) = 5
error: runtime error: integer divide by zero
10 / (10 % 6) = 2
10 / (10 % 7) = 3
10 / (10 % 8) = 5
10 / (10 % 9) = 10
error: runtime error: integer divide by zero
ch len is: 10
999
999
10
5
999
2
3
5
10
999

到此這篇關(guān)于Guam與golang recover()的使用方法的文章就介紹到這了,更多相關(guān)golang recover()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • intelliJ?idea安裝go開發(fā)環(huán)境并搭建go項(xiàng)目(打包)全過程

    intelliJ?idea安裝go開發(fā)環(huán)境并搭建go項(xiàng)目(打包)全過程

    最近在配置idea開發(fā)go語言時(shí)碰到很多問題,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于intelliJ?idea安裝go開發(fā)環(huán)境并搭建go項(xiàng)目(打包)的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • 詳解go如何優(yōu)雅的使用接口與繼承

    詳解go如何優(yōu)雅的使用接口與繼承

    Go語言中的接口和嵌套結(jié)構(gòu)體是兩種重要的代碼設(shè)計(jì)方式,接口定義了一組方法簽名,使得不同的類型能夠以相同的方式進(jìn)行交互,本文將給大家介紹go語言如何優(yōu)雅的使用接口與繼承,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2024-06-06
  • 解決panic: assignment to entry in nil map問題

    解決panic: assignment to entry in nil

    這篇文章主要介紹了解決panic: assignment to entry in nil map問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2008-01-01
  • Go語言操作MySQL的知識(shí)總結(jié)

    Go語言操作MySQL的知識(shí)總結(jié)

    Go語言中的database/sql包提供了保證SQL或類SQL數(shù)據(jù)庫的泛用接口,并不提供具體的數(shù)據(jù)庫驅(qū)動(dòng)。本文介紹了Go語言操作MySQL的相關(guān)知識(shí),感興趣的可以了解一下
    2022-11-11
  • golang操作連接數(shù)據(jù)庫實(shí)現(xiàn)mysql事務(wù)示例

    golang操作連接數(shù)據(jù)庫實(shí)現(xiàn)mysql事務(wù)示例

    這篇文章主要為大家介紹了golang操作連接數(shù)據(jù)庫實(shí)現(xiàn)mysql事務(wù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 詳解Golang中下劃線的使用方法

    詳解Golang中下劃線的使用方法

    這篇文章主要介紹了詳解Golang中下劃線的使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Golang之sync.Pool對(duì)象池對(duì)象重用機(jī)制總結(jié)

    Golang之sync.Pool對(duì)象池對(duì)象重用機(jī)制總結(jié)

    這篇文章主要對(duì)Golang的sync.Pool對(duì)象池對(duì)象重用機(jī)制做了一個(gè)總結(jié),文中有相關(guān)的代碼示例和圖解,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 使用Go語言玩轉(zhuǎn) RESTful API 服務(wù)

    使用Go語言玩轉(zhuǎn) RESTful API 服務(wù)

    RESTful API是一種基于HTTP協(xié)議的API設(shè)計(jì)風(fēng)格,遵循REST架構(gòu)風(fēng)格,這篇文章主要為大家介紹了如何通過Go語言構(gòu)建RESTful API服務(wù),有需要的可以了解下
    2025-02-02
  • golang使用sort接口實(shí)現(xiàn)排序示例

    golang使用sort接口實(shí)現(xiàn)排序示例

    這篇文章主要介紹了golang使用sort接口實(shí)現(xiàn)排序的方法,簡(jiǎn)單分析了sort接口的功能并實(shí)例演示了基于sort接口的排序?qū)崿F(xiàn)方法,需要的朋友可以參考下
    2016-07-07
  • Golang爬蟲框架 colly的使用

    Golang爬蟲框架 colly的使用

    本文主要介紹了Golang爬蟲框架 colly的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論

盐边县| 房产| 竹山县| 绿春县| 商都县| 康保县| 吉木乃县| 新河县| 鄂托克前旗| 泰和县| 哈尔滨市| 泌阳县| 颍上县| 兴海县| 江永县| 三明市| 凭祥市| 连州市| 镇沅| 靖边县| 兴业县| 汶上县| 上虞市| 兴义市| 八宿县| 武夷山市| 灵台县| 铜山县| 慈利县| 那曲县| 沽源县| 东阳市| 龙口市| 昭觉县| 宁城县| 阳春市| 民勤县| 武陟县| 布拖县| 大姚县| 炉霍县|