• 函数

    不支持命名参数与默认值

    • 可变参数

      求多个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指令
        
    • 内置函数

      • close

        关闭channel

      • len

        求 string、array、slice、map、channel的长度

      • new

        分配内存,分配值类型,返回指针

      • make

        分配内存,分配引用类型,返回原对象本身

      • append

        追加元素至数组、slice中

      • panic与recover

        错误处理

posted on 2022-09-14 12:41  _tiny_coder  阅读(17)  评论(0编辑  收藏  举报