这是我参与「第五届青训营 」笔记创作活动的第7天.
函数变量的作用域:
局部变量:函数内部定义的变量,叫做局部变量;
全局变量:函数外部定义的变量,叫做全局变量.
局部变量,就近原则.
递归函数:
import "fmt"
func main() {
sum := getsum(5)
fmt.Println(sum)
}
func getsum(n int) int {
if n == 1 {
return 1
}
return getsum(n-1) + n //结果: 15
}
defer:
defer语义:推迟,延迟
在go语言中,使用defer关键字来延迟一个函数或方法的执行.
defer函数或者方法:一个函数或方法的执行被延迟了.
-
你可以在函数中添加多个defer语句,当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回,特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题.
-
如果有很多调用defer,那么defer是采用先进后出(栈)模式.
import "fmt"
func main() {
fmt.Println(1)
defer f(2) //会被延迟到最后执行
fmt.Println(3)
fmt.Println(4)
defer f(5) //会被延迟到最后执行
fmt.Println(6)
defer f(7) //会被延迟到最后执行
defer f(8) //会被延迟到最后执行
}
func f(num int) {
fmt.Println(num)
}
函数本质的探讨:
import "fmt"
// func()本身就是一个数据类型
func main() {
//f1 如果不加括号,函数就是一个变量
//f1 如果加括号,就是函数的调用
fmt.Printf("%T\n", f1)
//定义函数类型的变量
var f5 func(int, int)
f5 = f1 //引用类型的
fmt.Println(f1)
fmt.Println(f5)
f5(1, 2)
}
func f1(a, b int) {
fmt.Println(a, b)
}
函数在Go语言中是复合类型,可以看做是一种特殊的变量.
函数():调用返回结果
函数名:指向函数体的内存地址,一种特殊类型的指针变量.
晚安啦~ 今天的学习就到这里.
加油,努力,打工人!