Go的學習旅程5 錯誤處理和資源管理

2021-08-20 07:36:33 字數 1717 閱讀 4617

defer的特點就是先入後出,所以在執行完正常語句後,在倒序執行defer

package main

import (

"fmt"

"./feibo"

"os"

"bufio")//

閉包的使用

,閉包分為自由變數和區域性變數,對於

sum來說就是自由變數

,他不在

return

的函式體中

,v是區域性變數

func

adder() func(int) (int

, int

, int)

}func

wirte(name

string) bool

//最後關閉

defer

file

.close()

//寫入記憶體

//newwriter

相當於newwritersize(wr, 4096) newwritersize

將wr

封裝成乙個擁有

size

大小快取的

bufio.writer

物件writ

:= bufio.newwriter(file

) //

稍後寫入檔案

//將快取中的資料提交到底層的

io.writer

中defer

writ

.flush()

a := feibo.fbnj()

for

i := 0;

i <

10;

i++

return true

}func

fff()

defer fmt.println(i

) }

}func

main()

//呼叫外部的函式

j := feibo.feibo()

fmt.println(j())

fmt.println(j())

fmt.println(j())

fmt.println(j())

fmt.println(j())

fmt.println(j())

fmt.println(j())

//defer

的用法,

當defer

語句被執行時,跟在

defer

後面的函式會被延遲執行。它們的執行順序與宣告順序相反。

//輸出的結果是

333 222 111

fmt.println("defer

的用法")

fmt.println(333)

defer fmt.println(111)

defer fmt.println(222)

//寫入斐波納吉數列到檔案

wirte("222.txt")

//迴圈輸出

,並加入

defer

fmt.println("

以下是for

的defer

的用法")

fff()

}

結果展示:

go的錯誤處理

錯誤需要開發者主動捕獲,同時只能獲取是什麼錯誤,無法獲悉呼叫棧 確定具體哪一行,也就是不知道那行出了錯誤 err func if err niltype myerr struct func myerr myerr error errorerrors.withmessage err,bar faile...

go中的錯誤處理

目前go中的錯誤處理機制比較簡單。往往是通過乙個error例項來傳達錯誤資訊。go內建乙個error介面來預設處理錯誤 type error inte ce func main i,error sometype.method 110 if error nil fmt.printf the value...

go中的錯誤處理

錯誤處理 有兩種方式可以生成自己的異常返回,fmt.errorf errors.new go中的error的定義如下。type error inte ce 也就是說我們可以自己定義的結構體,通過實現這個介面就可以了。比如 type myerror struct func me myerror err...