2022年8月更文挑战13-golang函数

97 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

golang函数

前文

本文内容为关于golang函数的一些基础总结,其中可能存在不准确之处。

函数声明

golang函数声明主要采用func关键字进行声明,主要的声明格式如下:

func name(parameter) (result) {
    body
}

其中的name为函数的名称,parameter为参数列表,可以不包含参数,也可以包含若干个参数。同样的result表示函数的返回结果,可以无返回结果,也可以返回多个数据。

函数执行错误

golang在开发过程中由于其多返回值的特性,经常会将函数内的错误信息直接返回给调用方。调用方进行函数调用后,需要进行显式的异常判断,从而进行异常问题的处理。

value, ok := cache.Lookup(key)
if !ok {
    // ...cache[key] does not exist…
}

如上为一次调用的示例,通过ok进行执行结果的判断。

匿名函数

golang中函数可以显式的声明,同样也可以进行匿名函数的声明。匿名函数不需要函数的名称,其他与正常的函数没有区别。比如需要在函数中返回一个函数,我们可以直接返回匿名函数:

    func fc() func() int {
    var x int
    return func() int {
        return x * x
    }
}

如上所示,通过直接进行匿名函数的返回,可以直接作为需要的返回结果进行后续的执行。如上我们就可以通过fc()进行返回值中的匿名函数调用。

可变参数

golang中的请求参数不是确定的,参数个数可以发生变化。而函数内部对于可变参数的处理,可以直接采用切片遍历的方式进行。同样的在调用时,我们既可以传入多个参数,也可以直接传入一个切片类型的数据。要注意的是可变参数的...符号。

func sum(param...int) int {
    total := 0
    for _, item := range param {
        total += item
    }
    return total
}

defer语句

defer语句可以理解为延迟执行的关键字。通过defer进行修饰,defer后面的执行语句将在函数整体被返回后统一进行执行。值得注意的是,如果我们在函数中进行循环操作,循环中包含defer代码,则defer将在所有循环执行结束后才进行执行。

for i := 0; i < 5; i++ {
   time.Sleep(1 * time.Second)
   fmt.Printf("====%d\n",i)
   defer fmt.Printf("%d ", i)
}

如上的打印顺序将是4 3 2 1 0,defer的执行顺序为后进入defer的将会先进行执行。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。