golang中的函数

孤风追影 · · 3505 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. 函数简介
  1. 概念:每一个程序都包含很多函数,函数是基本的代码块
  2. Golang中拥有三种类型的函数
    • 普通的带名字的函数
    • 匿名函数或这lambda函数
    • 方法

2. 函数的一般的定义格式
    func func_name(args, args...) type {
        // statement
    }

Note:type为函数的返回值类型


3. 按值传递和按引用传递
  1. 按值传递:Golang默认是按值传递,也就是传递参数的副本,函数在接收到参数的副本之后可能会对副本的值进行修改,但是不会影响原来的变量
  2. 按引用传递:如果你希望一个函数可以直接修改参数的值,而不是对其副本进行操作,你就需要在参数的前面加上&符号的形式传递给函数,这就是应用传递,此时传递给函数的参数就是一个指针。

4. 对函数的返回值进行命名
  1. Golang中允许你对函数的返回值类型进行命名
    func getName(name string) n string {
          return name
    }

5. 传递变长参数
  1. 概念:如果函数的最后一个参数是采用...type的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为0,这样的函数称为变参函数
  2. 其定义格式如下:
    func long_args(args, kwargs, ...int) {
         // statement
    }

6. defer关键字
  1. 概念:关键字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. 闭包
  1. 概念:如果不希望给函数起名字的时候,就可以使用匿名函数
    例如:
    func(x, y int) int {return x + y}
    这样的一个函数不能独立存在,会报编译错误,它必须赋值给一个变量,即把函数的地址赋值给一个变量,然后通过这个变量来调用这个匿名函数
  2. 自执行函数,就是在花括号后面加上一对圆括号,例如
        func () {
            sum := 0
            for i := 0; i <= 10; i++ {
                 sum+=1
            }
            fmt.Println(sum)
        }()
    

that's all


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:孤风追影

查看原文:golang中的函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3505 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传