我的 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 协议》,转载必须注明作者和本文链接
 
           hengbo_liu 的个人博客
 hengbo_liu 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: