函数的数据类型及本质
- 函数类型
func t1(){} //数据类型 func()
func t2(p int) int {return } //数据类型 func(int)int
//画外音:定义的函数可以作为一种数据类型 ,就如切片那样
-
函数本质
func fun1(a,b int){}
-
创建函数时,先创建一块内存空间,在内存中存储函数体,函数名fun1存储这块空间的地址(引用类型)。
-
fmt.Println(fun1) 打印出函数fun1的内存地址
-
fun1(1,2) 调用执行函数体内容
画外音:fun1与fun1()有本质的不同
-
-
直接定义一个函数类型变量
var f func(int,int) fmt.Println(f) //nil 从侧面证明函数类型是引用类型
res1 := t2 //将函数t2(函数地址)赋值给变量res1,res1和t2指向同一个函数体 //也可以使用res1进行函数调用 res2 := t2(1) //将函数t2函数进行调用,将函数的执行结果赋值给res2
-
总结
- 函数作为一中复合数据类型,可以看作一种特殊的变量
- 函数名():将函数进行调用,函数中的代码会全部执行,然后将return结果返回给调用者
- 函数名:指向函数体的内存地址,指针,引用类型