golang 錯誤處理

2021-10-03 04:35:07 字數 3641 閱讀 2187

一、defer

package main

import (

"fmt"

"os"

"bufio"

)func trydefer() }}

func writefile(filename string) else

return

} defer file.close()//無論return、panic最後都會被執行

writer := bufio.newwriter(file)

defer writer.flush()//先進後執行,後進先執行,退出時先執行flush,再執行close

f := fibonacci()

for i := 0; i < 20; i++

}func main()

輸出:

3029

2827

2625

2423

2221

2019

1817

1615

1413

1211109

8765

4321

0panic: printed too many

goroutine 1 [running]:

main.trydefer()

/users/jltxgcy/go/src/learn/errhandling/defer/defer.go:24 +0x111

main.main()

/users/jltxgcy/go/src/learn/errhandling/defer/defer.go:56 +0x20

defer執行的順序是先進後執行,無論是提前return還是panic,defer都會執行,用於關閉資源等,通常是成對出現。

二、recovery

package main

import (

"fmt"

)func tryrecover()

if err, ok := r.(error); ok else

}()// uncomment each block to see different panic

// scenarios.

// normal error

panic(errors.new("this is an error"))

// division by zero

//b := 0

//a := 5 / b

// causes re-panic

//panic(123)

}func main()

輸出:

error occurred: this is an error

開啟:

b := 0

a := 5 / b

fmt.println(a)

輸出:

error occurred: runtime error: integer divide by zero

開啟:

panic(123)
輸出:

panic: 123 [recovered]

panic: i don't know what to do: 123

goroutine 1 [running]:

main.tryrecover.func1()

/users/jltxgcy/go/src/learn/errhandling/recover/recover.go:19 +0x1f6

panic(0x10ac4a0, 0x10eb4d0)

/usr/local/go/src/runtime/panic.go:679 +0x1b2

main.tryrecover()

/users/jltxgcy/go/src/learn/errhandling/recover/recover.go:35 +0x5f

main.main()

/users/jltxgcy/go/src/learn/errhandling/recover/recover.go:39 +0x20

總結:recover是用來接收panic的錯誤的,類似於try catch,用於捕捉panic的資訊,不至於讓panic輸出資訊那麼難看。

如上panic(123),123並不是error型別,所以列印panic: i don't know what to do: 123。

三、錯誤處理例項

1、目錄結構

filelistingserver(目錄)

filelisting(目錄)     

type usererror string//string也能實現介面

file, err := os.open(path)//本地開啟檔案,可能不存在,可能沒有許可權,都向上返回,讓上一層來處理

}啟動server,在瀏覽器輸入localserver:8888/list/abc.txt,就可以顯示本地目錄下的abc.txt。

golang 錯誤處理

go 程式使用 error 值來表示錯誤狀態。與 fmt.stringer 類似,error 型別是乙個內建介面 type error inte ce 與 fmt.stringer 類似,fmt 包在列印值時也會滿足 error。通常函式會返回乙個 error 值,呼叫的它的 應當判斷這個錯誤是否等...

Golang的錯誤處理

1 當錯誤 panic 發生後,程式就會退出 崩潰 2 希望發生錯誤後,能夠捕獲到錯誤,並對其進行處理,保證後續程式能夠繼續執行 go中引入的處理方式是 defer panic recover。其中go中可以丟擲乙個panic異常,然後在defer中通過recover捕獲這個異常,然後正常處理。1 ...

Golang 20 錯誤處理

go 語言通過內建的錯誤介面提供了非常簡單的錯誤處理機制。error型別是乙個介面型別,這是它的定義 type error inte ce我們可以在編碼中通過實現 error 介面型別來生成錯誤資訊。函式通常在最後的返回值中返回錯誤資訊。使用errors.new 可返回乙個錯誤資訊 package ...