我的 golang 学习笔记系列二:golang的函数运用

函数介绍

特点

  • 无需声明原型
  • 支持不定变参
  • 支持多返回值
  • 支持命名返回参数
  • 支持匿名函数和必报
  • 函数也是一种类型,一个函数可以赋值给变量
  • 不支持嵌套一个包不能有两个名字一样的函数
  • 不支持重载
  • 不支持默认参数

示例

闭包的作用域

//  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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!