go语言学习笔记(9) 函数

来源:互联网 发布:恭亲王奕欣 知乎 编辑:程序博客网 时间:2024/06/02 03:29
格式
     func 函数名(参数列表)(返回值列表){
     }

参数列表
     参数列表格式类似变量声明,但不需要var关键字
          age int, name string
          i1, i2 int

返回值列表
     1、基本格式同参数列表
     2、返回值可以没有变量名
     3、当只有一个返回值,且返回值变量未命名时,或没有返回值时,括号可省略

多返回值
     实现
          1、直接return, 按顺序,依次附加上各个返回值
          2、由于返回值都有变量名,可以直接对各个返回值变量进行赋值
               调用return时,自动将各个返回值变量的值返回给调用语句
     接收
          1、准备对应的变量接收函数返回的值
          2、不需要接收的变量使用匿名变量(_)接收

函数调用
     包内函数:直接调用
     包外函数:
          1、导入包
          2、调用包外函数:包名.函数名(实参表)
          3、函数名必须大写字母开头

不定参数的函数
     1、不限制不定参数的个数,但是限制不定参数的类型
          最后一个参数类型: ...type
               ...type:本质上是一个数组切片,即[]type
               可以通过访问数组切片元素的方式来获取实参
     2、不定参数的函数中向另一个不定参数的函数传递参数
          myfunc(args...) //原样传递
          myfunc(args[1:]...) //传递部分
     3、任意类型的不定参数
          1)、参数类型: ...interfase{}
          2)、获取各个实参的类型
               for _, arg := range args{
                    switch arg.(type){
                         case int:...
                         case string:...
                         ...
                    }
               }

匿名函数
     由一个不带函数名的函数声明函数体构成

     可以直接赋值给变量,或直接执行
          f := func (x int) int{...}
          func(x int) int{...}(2)//带“(2)”表示,直接调用,参数为2

闭包
     定义
          包含自由变量的代码块
          自由变量: 不在闭包内和任何全局上下文中定义,而是在定义闭包的环境中定义
     作用
          只要闭包还会被调用,闭包中引用的变量(包含自由变量)就不会被释放
          闭包为自由变量提供绑定的计算环境
     价值
          闭包可以做为函数对象或匿名函数,存储到变量中,做为参数进行传递
          能够被函数动态的创建和返回
     实例
          func main(){
               j := 5
               fa := func()(func()){ //匿名函数,返回值为一个函数,直接赋值给fa
                    i := 10 //i: 自由变量,只有匿名函数能访问到,保证其安全
                    return func(){ //返回闭包
                         fmt.Println(i, j)
                    }
               }() //(): 表示匿名函数直接运行
               fa() //调用闭包
               j *= 2
               fa() //调用闭包
          }


原创粉丝点击