第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

解鎖即可觀看《Go開發(fā)工程師》完整課程視頻

Go開發(fā)工程師

未來(lái)3-5年企業(yè)高性能項(xiàng)目不可替代的語(yǔ)言,從基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)再到重構(gòu),真正從入門到精通

【第1周】Go基礎(chǔ)知識(shí)入門
【第2周】容器,go編程思想
【第3周】Go并發(fā)編程和工程管理
【第4周】從0開始理解rpc和grpc
【第5周】grpc和protobuf進(jìn)階
【第6周】 yapi文檔管理、gorm詳解
【第7周】gin快速入門
【第8周】用戶服務(wù)的grpc服務(wù)
【第9周】用戶服務(wù)的web服務(wù)
【第10周】服務(wù)注冊(cè)/發(fā)現(xiàn)、配置中心、負(fù)載均衡
【第11周】商品微服務(wù)的grpc服務(wù)
【第12周】 商品微服務(wù)的gin層和oss圖片服務(wù)
【第13周】庫(kù)存服務(wù)和分布式鎖
【第14周】訂單和購(gòu)物車微服務(wù)
【第15周】 支付寶支付、用戶操作微服務(wù)、前后端聯(lián)調(diào)
【第16周】elasticsearch實(shí)現(xiàn)搜索微服務(wù)
【第17周】 分布式理論基礎(chǔ)、分布式事務(wù)解決方案
【第18周】 學(xué)習(xí)rocketmq實(shí)現(xiàn)冪等性機(jī)制等
【第19周】鏈路追蹤、限流、熔斷、降級(jí)
【第20周】api網(wǎng)關(guān)、部署
【第21周】開發(fā)規(guī)范和go基礎(chǔ)擴(kuò)展
【第22周】設(shè)計(jì)模式和單元測(cè)試
【第23周】protoc插件開發(fā)、cobra命令行
【第24周】log日志包設(shè)計(jì)
【第25周】ast代碼生成工具開發(fā)
【第26周】三層代碼結(jié)構(gòu)
【第27周】grpc服務(wù)封裝更方便的rpc服務(wù)
【第28周】深入grpc的服務(wù)注冊(cè)、負(fù)載均衡原理
【第29周】基于gin封裝api服務(wù)
【第30周】可觀測(cè)的終極解決方案
【第31周】系統(tǒng)監(jiān)控核心
【第32周】用戶、商品服務(wù)重構(gòu)
【第33周】訂單、庫(kù)存等服務(wù)重構(gòu)
【第33+周】訂單服務(wù)重構(gòu)、wire進(jìn)行ioc控制
【第34周】通過(guò)k8s部署服務(wù)
【第34+周】devops和k8s
章節(jié)
問(wèn)答
課簽
筆記
評(píng)論
占位
占位

Go語(yǔ)言異常處理——panic

    在上一節(jié),我們已經(jīng)了解到了足夠多的error接口及其周邊的知識(shí)?,F(xiàn)在,是學(xué)習(xí)另外一種異常處理方式的時(shí)候了。先來(lái)展示一個(gè)名詞——panic。panic可被意譯為運(yùn)行時(shí)恐慌。因?yàn)樗挥性诔绦蜻\(yùn)行的時(shí)候才會(huì)被“拋出來(lái)”。并且,恐慌是會(huì)被擴(kuò)散的。當(dāng)有運(yùn)行時(shí)恐慌發(fā)生時(shí),它會(huì)被迅速地向調(diào)用棧的上層傳遞。如果我們不顯式地處理它的話,程序的運(yùn)行瞬間就會(huì)被終止。這里有一個(gè)專有名詞——程序崩潰。內(nèi)建函數(shù)panic可以讓我們?nèi)藶榈禺a(chǎn)生一個(gè)運(yùn)行時(shí)恐慌。不過(guò),這種致命錯(cuò)誤是可以被恢復(fù)的。在Go語(yǔ)言中,內(nèi)建函數(shù)recover就可以做到這一點(diǎn)。
  
    實(shí)際上,內(nèi)建函數(shù)panicrecover是天生的一對(duì)。前者用于產(chǎn)生運(yùn)行時(shí)恐慌,而后者用于“恢復(fù)”它。不過(guò)要注意,recover函數(shù)必須要在defer語(yǔ)句中調(diào)用才有效。因?yàn)橐坏┯羞\(yùn)行時(shí)恐慌發(fā)生,當(dāng)前函數(shù)以及在調(diào)用棧上的所有代碼都是失去對(duì)流程的控制權(quán)。只有defer語(yǔ)句攜帶的函數(shù)中的代碼才可能在運(yùn)行時(shí)恐慌迅速向調(diào)用棧上層蔓延時(shí)“攔截到”它。這里有一個(gè)可以起到此作用的defer語(yǔ)句的示例:

defer func() {
    if p := recover(); p != nil {
        fmt.Printf("Fatal error: %s\n", p)
    }
}()

    在這條defer語(yǔ)句中,我們調(diào)用了recover函數(shù)。該函數(shù)會(huì)返回一個(gè)interface{}類型的值。還記得嗎?interface{}代表空接口。Go語(yǔ)言中的任何類型都是它的實(shí)現(xiàn)類型。我們把這個(gè)值賦給了變量p。如果p不為nil,那么就說(shuō)明當(dāng)前確有運(yùn)行時(shí)恐慌發(fā)生。這時(shí)我們需根據(jù)情況做相應(yīng)處理。注意,一旦defer語(yǔ)句中的recover函數(shù)調(diào)用被執(zhí)行了,運(yùn)行時(shí)恐慌就會(huì)被恢復(fù),不論我們是否進(jìn)行了后續(xù)處理。所以,我們一定不要只“攔截”不處理。
  
    我們下面來(lái)反觀panic函數(shù)。該函數(shù)可接受一個(gè)interface{}類型的值作為其參數(shù)。也就是說(shuō),我們可以在調(diào)用panic函數(shù)的時(shí)候可以傳入任何類型的值。不過(guò),我建議大家在這里只傳入error類型的值。這樣它表達(dá)的語(yǔ)義才是精確的。更重要的是,當(dāng)我們調(diào)用recover函數(shù)來(lái)“恢復(fù)”由于調(diào)用panic函數(shù)而引發(fā)的運(yùn)行時(shí)恐慌的時(shí)候,得到的值正是調(diào)用后者時(shí)傳給它的那個(gè)參數(shù)。因此,有這樣一個(gè)約定是很有必要的。
  
    總之,運(yùn)行時(shí)恐慌代表程序運(yùn)行過(guò)程中的致命錯(cuò)誤。我們只應(yīng)該在必要的時(shí)候引發(fā)它。人為引發(fā)運(yùn)行時(shí)恐慌的方式是調(diào)用panic函數(shù)。recover函數(shù)是我們常會(huì)用到的。因?yàn)樵谕ǔG闆r下,我們肯定不想因?yàn)檫\(yùn)行時(shí)恐慌的意外發(fā)生而使程序崩潰。最后,在“恢復(fù)”運(yùn)行時(shí)恐慌的時(shí)候,大家一定要注意處理措施的得當(dāng)。

任務(wù)

    命令源碼文件index.go中有三個(gè)函數(shù):mainouterFuncinnerFunc。在innerFunc函數(shù)中,我準(zhǔn)備通過(guò)調(diào)用panic函數(shù)引發(fā)一個(gè)運(yùn)行時(shí)恐慌。請(qǐng)你在文件中的適當(dāng)位置添加一條defer語(yǔ)句,以使得該運(yùn)行時(shí)恐慌得到“恢復(fù)”。并且,該文件的運(yùn)行應(yīng)該使標(biāo)準(zhǔn)輸出上打印出:

Enter main
Enter outerFunc
Enter innerFunc
Fatal error: Occur a panic!
?不會(huì)了怎么辦

應(yīng)該在main函數(shù)的開始處添加:

defer func() {
    if p := recover(); p != nil {
        fmt.Printf("Fatal error: %s\n", p)
    }
}()
||

提問(wèn)題

寫筆記

公開筆記
提交
||

請(qǐng)驗(yàn)證,完成請(qǐng)求

由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求

加群二維碼

打開微信掃碼自動(dòng)綁定

您還未綁定服務(wù)號(hào)

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問(wèn)題答復(fù)提醒
  • · 賬號(hào)支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請(qǐng)您關(guān)注公眾號(hào)
關(guān)注后,及時(shí)獲悉本課程動(dòng)態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問(wèn)將花費(fèi)2個(gè)積分

你的積分不足,無(wú)法發(fā)表

為什么扣積分?

本次提問(wèn)將花費(fèi)2個(gè)積分

繼續(xù)發(fā)表請(qǐng)點(diǎn)擊 "確定"

為什么扣積分?