携手创作,共同成长!这是我参与「掘金日新计划 · 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的将会先进行执行。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。