笔记 - 常量,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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!