我的 golang 學習筆記系列二:golang的函式運用

hengbo_liu發表於2021-10-15

函式介紹

特點

  • 無需宣告原型
  • 支援不定變參
  • 支援多返回值
  • 支援命名返回引數
  • 支援匿名函式和必報
  • 函式也是一種型別,一個函式可以賦值給變數
  • 不支援巢狀一個包不能有兩個名字一樣的函式
  • 不支援過載
  • 不支援預設引數

示例

閉包的作用域

//  test 閉包測試
func test() func() {
    // 此次 i 的作用域是在 test 函式中 和閉包中的記憶體地址是一樣的
    i := 0
    // 閉包的作用域 是一樣的 類似與PHP中的  use(&i)
    return func() {
        i ++
        fmt.Println(i)
    }
}

defer函式

func def() {
   // 延遲執行,會在函式執行完之後執行,如:函式return之前
 // 如果有多個則以 棧 結構順序執行  defer index()
}

pinic 函式(丟擲異常)和recover函式(捕獲異常)

func pa() {
    // 捕獲異常
    defer func() {
        fmt.Println("捕獲到異常",recover())
    }()

    // 相當於  throw
    panic("這是異常")
}

封裝try catch 及異常捕獲


// 異常捕獲
try(func() {
   fmt.Println("正常執行方法")
   panic("我執行錯誤了")
}, func(err interface{}) {
   // 異常處理
  fmt.Println("當前方法執行錯誤:,錯誤資訊為:",err)
})


// 封裝try catch
// interface{} 可以接受所有異常
// fun 正常方法
// catch 異常處理的方法
func try(fun func(),catch func(err interface{})) {
    defer func() {
        if err := recover(); err != nil{
            catch(err)
        }
    }()

    fun()
}

返回型捕獲異常寫法


// 異常方法處理
_,err := sumerr()
if err != nil {
   fmt.Println("加運算方法執行出錯了,錯誤資訊為:",err)
}

// 如果出錯則返回異常
func sumerr() (int, error) {
   return 9,errors.New("方法sumerr 執行錯誤,除數不能為0")
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章