函数 : Go 语言 用 func 关键字来定义

1 go 程序中 至少有一个 函数 main函数
2 Go语言 函数不能重载

语法格式

参数类型简写: 参数类型一致时, 可以把类型写在后边 ,只写一个
在这里插入图片描述
参数类型不匹配时 不会进行隐式类型转换。
参数类型不匹配时 不会进行隐式类型转换。
参数类型不匹配时 不会进行隐式类型转换。

可变参数 函数(原理: slice)

在这里插入图片描述

可变參函数的使用切片的原理, 将传入的数据存放在 slice 中,
类似的可变參函数有 printf 、append 等 ,可以 摁住ctrl键查看源码

一个函数中,只能有一个可变參函数, 并且可变参必须放在 函数参数的最后

一个函数中,只能有一个可变參函数, 并且可变参必须放在 函数参数的最后

一个函数中,只能有一个可变參函数, 并且可变参必须放在 函数参数的最后

参数传递

参数传递 分为 值传递 和 引用传递

切片: 应用传递
数组: 值传递(copy了一份)
在这里插入图片描述
在这里插入图片描述

另外 : func 函数的参数类型必须匹配才能接收,函数调用时不会进行类型转换。

引用传递: 引用类型数据都是引用传递: 例如 slice,map chan等

函数的返回值

Go 语言 函数的返回值 可以是多个值

语法格式:

 m

defer 语句: 延迟函数执行

延迟语句 : 延迟语句用来延迟一个函数/方法的执行,等到 主函数要返回时, 再去执行被延迟的语句

意义:
比如文件指针 我们打开了 ,后来我们忘了关闭,临时文件忘了删除, 我们就可以在定义临时文件/ 打开文件指针时 进行定义 defer语句: 到时候关闭/删除临时文件,避免内存泄漏

Panic 函数 : 错误信息的处理

recover 函数: 恢复数据, 必须放在 defer 语句中

defer 语句 案例:

一: 一个 defer 自己最后执行
二: 多个defer 执行为定义defer 的逆序,类似于 栈

在这里插入图片描述
在这里插入图片描述

defer 语句的 函数 ,调用时 ,参数已经传递过去了 ,只是函数执行延迟了

函数的 数据类型

函数 也有 函数的类型 : func()

带有参数的还有 参数func(int)
带有返回值 的 还有返回值类型 func(int)(int)

func func1(){
}

c: = func1
那么这是一个 值拷贝
c() 等价于 func1()

匿名函数 :没有名字的函数,

可以赋值给函数变量 ,这样可以多次调用,
也可以 当作lambda表达式那么用

在这里插入图片描述
匿名函数 可以通过赋值给某一个函数变量的方式使用多次
在这里插入图片描述

Go 语言支持函数式编程:

回调函数

包含回调函数的函数 称为 高阶函数

func fun1(){
}

func fun2(a int, fun1){
}

此时 fun2称为 高阶函数

在这里插入图片描述

闭包结构分析

在这里插入图片描述
//闭包结构: 函数内部嵌套这匿名函数, 而匿名函数又是该函数的返回值,
//那么当 匿名函数使用到了外层函数的局部变量时,外层数的该局部变量将不能释放
// 因为被人家用到了

此时 这个 基部变量 i 就潜逃了