《日子》golang-函數function

函數function

-Go函數不支持嵌套、重載和默認參數
-但支持以下特性
-無需聲明原型、不定長度變參、多返回值、命名返回參數匿名函數、閉包

-定義函數使用關鍵字func,且左大括號不能另行一行
-函數也可以作為一種類型使用

閉包
<code>
package main
import (
"fmt"
)
func main() {
f := closure(10)
fmt.Println(f(1))
fmt.Println(f(2))
}
func closure(x int) func(int) int {
return func(y int) int {
return x + y
}
}
</code>

defer

-的執行方式類似其它語言中的析構函數,在函數體執行結束后按照調用順序的相反順序逐個執行
-即使函數發生嚴重錯誤也會執行
-支持匿名函數的調用
-常用于資源清理、文件關閉、解鎖以及記錄時間等操作
-通過與匿名函數配合可在return之后修改函數計算結果
-如果函數體內某個變量作為defer時匿名函數的參數,則在定義defer時即已經獲得了拷貝,否則則是引用某個 變量的地址

-Go沒有異常機制,但有panic/recover 模式來處理錯誤
-Panic可以在任何地方引發,但revocer只有在defer調用的函數中有效

<code>
package main
import (
"fmt"
)
func main() {
A()
B()
C()
}
func A() {
fmt.Println("Func A")
}
func B() {
defer func() {
if err := recover(); err != nil {
fmt.Println("Recover in B")
}
}()
panic("Panic in B")
}
func C() {
fmt.Println("Func C")
}
</code>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容