- 函数
不支持命名参数与默认值
-
可变参数
求多个int的和
func IntSum(x ...int) { sum := 0 for _, v := range x { sum += v } return sum }
-
返回值命名
相当于在函数内部声明了返回值变量
func calc(x, y int) (sum int) { sum := x + y return }
-
全局变量
全局变量尽量少用,需要有区分度,再局部变量可能会重复声明出现混淆
var name = "mkl" func main() { name = "bob" // 修改全局变量 name := "Marry" // 又重新声明一个可用的声明局部变量 }
-
if判断语句中的作用域
不得在语句块外部使用
if v, ok != m["mkl"]; ok { }
-
函数类型与函数签名
- 自定义函数类型
type myFunc func() var fx myFunc fx = func() { fmt.Println("hello world!") } // 赋值 fx()
- 函数签名
函数定义的格式
- 自定义函数类型
-
高阶函数
将函数作为参数传入
能够提高代码的可读性 -
闭包
- 匿名函数
必须立即调用 或者 定义变量名接收
用在回调函数。闭包
闭包=函数+引用
func adder() func(int)int{ x := 20 // 函数内部引用了外部函数的变量x return func(y int) int { x -= y return x } } f := adder() f(10)
- 匿名函数
-
defer函数
函数退出时调用
执行顺序:先进后出
适用于释放资源func main() { fmt.Println("start") defer fmt.Println(1) defer fmt.Println(2) defer fmt.Println(3) fmt.Println("end") } // start // end // 3 // 2 // 1
- return 语句的底层实现
return x => 1.返回值=x 2.运行defer 3.RET指令
- return 语句的底层实现
-
内置函数
- close
关闭channel
- len
求 string、array、slice、map、channel的长度
- new
分配内存,分配值类型,返回指针
- make
分配内存,分配引用类型,返回原对象本身
- append
追加元素至数组、slice中
- panic与recover
错误处理
- close
-
记录自己的学习历程!