1. 函数简介
  1. 概念:每一个程序都包含很多函数,函数是基本的代码块
  2. Golang中拥有三种类型的函数
    • 普通的带名字的函数
    • 匿名函数或这lambda函数
    • 方法
2. 函数的一般的定义格式
    func func_name(args, args...) type {
        // statement
    }
type
3. 按值传递和按引用传递
  1. 按值传递:Golang默认是按值传递,也就是传递参数的副本,函数在接收到参数的副本之后可能会对副本的值进行修改,但是不会影响原来的变量
  2. 按引用传递:如果你希望一个函数可以直接修改参数的值,而不是对其副本进行操作,你就需要在参数的前面加上&符号的形式传递给函数,这就是应用传递,此时传递给函数的参数就是一个指针。
4. 对函数的返回值进行命名
  1. Golang中允许你对函数的返回值类型进行命名
    func getName(name string) n string {
          return name
    }
5. 传递变长参数
...type
    func long_args(args, kwargs, ...int) {
         // statement
    }
6. defer关键字
defer
7. 一些内置函数
  1. close:用于管道
  2. len, cap:len用于返回某个类型的长度或数量;cap返回某个类型的最大容量(只能用于切片和map)
  3. new和make:均是用于内存分配;new用户用户自定义类型和值类型,例如结构;make用于用户内置引用类型(切片,map,管道)
  4. copy和append:用于复制和连接切片
  5. panic和recover:均用于错误处理
8. 递归函数
  1. 概念:当一个函数在函数体内调用自身,则称之为递归
    package main
    
    import "fmt"

    func main() {
        result := 0
        for i := 0; i <= 10; i++ {
             result = fibonacci(i)
             fmt.Println(result)
        }
    }
    
    func fibonacci(n int) (res int) {
            if n >= 1 {
                res = 1
            } else {
                res = fibonacci(n-1) + fibonacci(n-2)
            }
            return
    }
9. 函数一等公民
  1. 函数可以作为其他函数的参数进行传递,然后在其他函数内调用执行,一般称为回调。
    package main

    import "fmt"

    func main() {
        callback(2, Add)
    }

    func Add(x, y int) {
        fmt.Println(x+y)
    }

    func callback(z int, f func(int, int)) {
        f(z, 5)
    }
10. 闭包
    func () {
        sum := 0
        for i := 0; i <= 10; i++ {
             sum+=1
        }
        fmt.Println(sum)
    }()

that's all