下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Go語言學(xué)習(xí)筆記之錯誤和異常詳解目錄錯誤異??偨Y(jié)
錯誤
Go語言通過內(nèi)置的錯誤接口提供了非常簡單的錯誤處理機(jī)制,Error類型是一個接口類型。
typeerrorinterface{
Error()string
}
可以在編碼中通過實(shí)現(xiàn)error接口類型來生成錯誤信息。
函數(shù)通常在最后的返回值中返回錯誤信息。
//定義一個DivideError結(jié)構(gòu)
typeDivideErrorstruct{
divideeint
dividerint
//實(shí)現(xiàn)`error`接口
func(de*DivideError)Error()string{
strFormat:=`
Cannotproceed,thedivideriszero.
dividee:%d
divider:0
returnfmt.Sprintf(strFormat,de.dividee)
funcDivide(varDivideeint,varDividerint)(resultint,errorMsgstring){
ifvarDivider==0{
dData:=DivideError{
dividee:varDividee,
divider:varDivider,
errorMsg=dData.Error()
return
}else{
returnvarDividee/varDivider,""
}
Divide函數(shù)傳入除數(shù)和被除數(shù),當(dāng)被除數(shù)為零時,函數(shù)拋出異常。
ifresult,errorMsg:=Divide(100,10);errorMsg==""{
fmt.Println(result)
}
這是正常情況下。
當(dāng)除數(shù)為零的時候會返回錯誤信息。
if_,errorMsg:=Divide(100,0);errorMsg!=""{
fmt.Println("errorMsgis:",errorMsg)
}
異常
Go的類型系統(tǒng)會在編譯時捕獲很多錯誤,但有些錯誤只能在運(yùn)行時檢查,如數(shù)組訪問越界、空指針引用等。這些運(yùn)行時錯誤會引起painc異常。
當(dāng)程序發(fā)生異常時,無法繼續(xù)運(yùn)行,使用panic來終止程序。
應(yīng)該盡可能地使用錯誤,而不是使用panic和recover。只有當(dāng)程序不能繼續(xù)運(yùn)行的時候,才應(yīng)該使用panic和recover機(jī)制。
panic有兩個合理的用例:
發(fā)生了一個不能恢復(fù)的錯誤,此時程序不能繼續(xù)運(yùn)行。發(fā)生了一個編程上的錯誤。一個接收指針參數(shù)的方法,而其他人使用nil作為參數(shù)調(diào)用了它。在這種情況下,可以使用panic,因?yàn)檫@是一個編程錯誤:用nil參數(shù)調(diào)用了一個只能接收合法指針的方法。
內(nèi)建函數(shù)panic:
funcpanic(vinterface{})
當(dāng)程序終止時,會打印傳入panic的參數(shù)。
packagemain
funcmain(){
panic("panicerror")
}
會打印出傳入panic函數(shù)的信息,并打印出堆棧跟蹤。
recover是一個內(nèi)建函數(shù),用于重新獲得panic協(xié)程的控制。
funcrecover()interface{}
recover必須在defer函數(shù)中才能生效,在延遲函數(shù)內(nèi)調(diào)用recover,可以取到panic的錯誤信息,并且停止panic續(xù)發(fā)事件。只有在相同的協(xié)程中調(diào)用recover才管用,recover不能恢復(fù)一個不同協(xié)程的panic。
packagemain
import"fmt"
funcoutOfArray(xint){
deferfunc(){
//recover()可以將捕獲到的panic信息打印
iferr:=recover();err!=nil{
fmt.Println(err)
vararray[5]int
array[x]=1
funcmain(){
//故意制造數(shù)組越界觸發(fā)panic
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)風(fēng)險管理與防范制度
- 交通肇事逃逸處理制度
- 2026甘肅電投常樂發(fā)電有限責(zé)任公司招聘30人參考題庫附答案
- 2026福建省面向中國科學(xué)院大學(xué)選調(diào)生選拔工作考試備考題庫附答案
- 2026貴州遵義市湄潭縣消防救援大隊(duì)政府專職消防隊(duì)員招聘20人參考題庫附答案
- 2026重慶醫(yī)科大學(xué)附屬第一醫(yī)院工作人員招聘參考題庫附答案
- 2026青海省海西州德令哈市司法局招聘1人備考題庫附答案
- 中共玉環(huán)市委宣傳部關(guān)于下屬事業(yè)單位 市互聯(lián)網(wǎng)宣傳指導(dǎo)中心公開選聘1名工作人員的考試備考題庫附答案
- 會昌縣2025年縣直事業(yè)單位公開選調(diào)一般工作人員考試備考題庫附答案
- 德令哈市公安局2025年面向社會公開招聘警務(wù)輔助人員參考題庫附答案
- JJF 1069-2012 法定計量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- GB∕T 5900.2-2022 機(jī)床 主軸端部與卡盤連接尺寸 第2部分:凸輪鎖緊型
- 2011-2015廣汽豐田凱美瑞維修手冊wdl
- DFMEA編制作業(yè)指導(dǎo)書新版
- KTronics籃輸送式洗碗碟機(jī)操作手冊
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
- 閥門基礎(chǔ)知識上
- 第二章注射成型工藝與模具結(jié)構(gòu)
- 工業(yè)廢水深度處理活性焦吸附技術(shù)
- 河道腳手架專項(xiàng)施工方案
評論
0/150
提交評論