Go 函数 学习笔记

来源:互联网 发布:淘宝装修店铺模板 编辑:程序博客网 时间:2024/06/07 19:52

函数function:

  • Go 函数 不支持 嵌套、重载和默认参数
    但支持以下特性:

    无需声明原型、不定长度变参、多返回值、命名返回值参数匿名函数、闭包
  • 定义函数使用关键字 func,且左大括号不能另起一行

  • 函数也可以作为一种类型使用

defer

  • defer的执行方式类似其它语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行,即使函数发生严重错误也会执行。
  • 支持匿名函数的调用
  • 常用于资源清理、文件关闭、解锁以及记录时间等操作
  • 通过与匿名函数配合可在return之后修改函数计算结果
  • 如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer
    时即已经获得了拷贝,否则则是引用某个变量的地址
package mainimport (    "fmt")func main() {    defer fmt.Println(1111)    defer fmt.Println(2222)    // fmt.Println("-------------------")    for i := 0; i < 3; i++ {        defer fmt.Println(i)    }    // fmt.Println("-------------------")    // 如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则则是引用某个变量的地址    for i := 4; i < 7; i++ {        defer f(i)    }    // fmt.Println("-------------------")    for i := 7; i < 10; i++ { //闭包        defer func() {            fmt.Println(i)        }()    }    // fmt.Println("-------------------")}func f(a int) {    fmt.Println(a)}

输出结果:
这里写图片描述

panic/recover

Go 没有异常机制,但有 panic/recover 模式来处理错误
Panic 可以在任何地方引发,但recover只有在defer调用的函数中有效

package mainimport (    "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")}

输出结果:
这里写图片描述

本文参考整理自:《Go 编程基础》

个人微信公众号:
这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

原创粉丝点击