Go语言学习笔记--函数

函数编写的顺序无关紧要,鉴于可读性,最好把main()函数写在文件的前面

Go里面有三中类型的函数:

普通的带有名字的函数

匿名函数或者lambda函数

方法(Methods)

注意:

**go语言不允许函数重载,没有泛型概念

**函数签名:函数参数,返回值以及它们的类型被统称为函数签名

**空白符“_”

 

返回值:

函数可以返回多个值,相当于python的元组。

  1. 如果一个函数需要返回四五个值,我们可以传递一个切片给函数(如果返回值具有相同类型),或者传递一个结构体(如果返回值具有不同类型)。因为传递一个指针允许直接修改原来的值,消耗更少。
  2. 命名返回值和非命名返回值
    1. func getX2AndX3(input int) (int, int)
    2. func getX2AndX3_2(input int) (x2 int, x3 int)
  1. 函数参数:
    1. 按值传递参数:传递的是参数的副本,接受参数副本之后,修改值,不会影响原来的变量。
    2. 按引用传递参数:将参数的地址传递给函数,可以修改参数原来的值。函数调用时,像切片,字典,接口,通道这样的引用类型都是默认使用引用传递,及时没有显示的指出指针
  2. 传递变长参数:
    1. 如果函数的最后一个参数是采用…type的形式,那么为变长参数
func Greeting(prefix string, who ...string)

Greeting("hello:", "Joe", "Anna", "Eileen")

                              变量who 的值为 []string{"Joe", "Anna", "Eileen"}

  1. 如果可变长参数类型一样,可以使用slice或者数组左参数
  1. 如果可变长参数的类型不一样,可以使用结构和空接口做参数
    1. 结构:参数个数和类型已知,但不行同
    2. 空接口:参数个数和类型未知,一般会使用for-range循环以及switch对结构中每个参数类型进行判断
func typecheck(..,..,values … interface{}) {

    for _, value := range values {

        switch v := value.(type) {

            case int: …

            case float: …

            case string: …

            case bool: …

            default: …

        }

    }

}
  1. defer和追踪
    1. 关键字defer允许我们推迟到函数返回之前,或者任意位置执行return语句之后一刻才执行猴哥语句或函数。类似其他语言的finally,一般用于释放某些已分配的资源。
    2. 使用defer语句实现代码追踪
    3. 使用defer语句来记录函数的参数与返回值

 

 

 

当有多个defer行为被注册时,它们会逆序执行(类型栈,即后进先出)

 

 

  1. 内置函数
    1. Go语言拥有一些不需要进行导入操作就可以使用的内置函数。
    2.  
  2. 递归函数
    1. 函数调用函数自身
  3. 将函数作为参数
    1. 函数可以作为其他函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调

 

  1. 匿名函数(闭包):
    1. 匿名函数不能够独立存在,但是可以赋值给变量,这样变量就保存了该函数的地址,然后通过变量名对函数进行调用

fplus := func(x, y int) int { return x + y };fplus(3,4)

  1. defer配合匿名函数使用
  1. 应用闭包:将函数作为返回值
    1. 闭包函数保存并积累其中的变量的值,不管外部函数推出与否,它都能够继续操作外部函数中的局部变量。

func Add2() (func(b int) int)

func Adder(a int) (func(b int) int)

  1. 使用闭包调试调试
  2. 计算函数执行时间:
    1. 使用time包中的Now()和Sub函数
    2. start := time.Now(); …;end = time.Now();dellta := end.Sub(start)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值