笔记 - 常量,defer

  • 函数 (main 函数与 init 函数)
  • cost 和 iota
    iota,特殊常量,可以被认为是一个可以被编译器修改的常量
    每当定义一个 cost,iota 的初始值为 0
    每当定义一个常量,就会自动累加 1
    直到下一个 const 出现,清零
    iota 可以作为枚举值:
    cost (
       a = iota
       b = iota
       c = iota
    )
    fmt.Println(a, b, c)
    // 结果 0, 1, 2
    const (
     d = iota
     e
    )
    fmt.Println(d, e)
    // 结果 0, 1
    const  (
     MALE = iota
     FEMALE
     UNKNOW
    )
    fmt.Println(MALE, FEMALE, UNKNOW)
    // 结果 0, 1, 2
    第一个 iota 等于 0, 每档 iota 在新的一行被使用时,它的值都会被自动加 1;所以 a=0,b=1,c=2
    可以简写如下形式:
    cost (
       a = iota
       b
       c
    )
    例子:
    const (
        A = iota
        B
        C
        D = "abc"
        E
        F = 100
        G
        H = iota
        I
    )
    const (
       J = iota
    )
    fmt.RrintLn(A,B,C,D,E,F,G,H,I,J)
    // 结果:0,1,2,abc,abc,100,100,7,8,0
  • defer
    在 go 语言中,使用 defer 关键字来延迟一个函数或方法的执行
    defer 函数或方法,使用 defer 关键字来延迟一个函数活方法的执行
    使用场景:
    1. db.close (), 连接池的关闭
    2. go 语言中关于异常的处理,使用 panic () 和 recover ()
      panic 函数用于引发的恐慌,导致程序中断执行
      recove 函数用于恢复程序的执行,recover () 与语法上要求必须在 defer 中执行
    3. 如果多个 defer 函数使用了栈的特点:先进后出,后进先出
    4. defer 函数传递参数的时候
      defer 函数调用时,就已经传递参数,函数代码暂时不执行
  1. defer 函数的注意点:
    当外围函数中的语句正常执行完毕,只有其中所有的延迟函数执行完毕,外围函数才会真正的结束执行
    当执行外围函数有 return 语句时,只有其中所有的延迟函数都执行完毕,外围函数才会真正返回。
    当外围函数中的代码引发运行恐慌时,只有其中素有的延迟函数执行完毕后,改运行时恐慌才会真正被扩展至调用函数
    defer func1("hello")
    fmt.Println("123456")
    defer func1("world") // 延迟
    fmt.Println("789")
    // hello, 123456, 789, world
    func func1(s string){
    fmt.PrintLn(s)
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接