笔记 - 常量,defer
- 函数 (main函数与init函数)
- cost 和iota
iota,特殊常量,可以被认为是一个可以被编译器修改的常量
每当定义一个cost,iota的初始值为0
每当定义一个常量,就会自动累加1
直到下一个const出现,清零
iota 可以作为枚举值:
第一个iota等于0,每档iota在新的一行被使用时,它的值都会被自动加1;所以a=0,b=1,c=2cost ( 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
可以简写如下形式:
例子: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 关键字来延迟一个函数活方法的执行
使用场景:- db.close(), 连接池的关闭
- go语言中关于异常的处理,使用panic()和recover()
panic函数用于引发的恐慌,导致程序中断执行
recove函数用于恢复程序的执行,recover()与语法上要求必须在defer中执行 - 如果多个defer函数使用了栈的特点:先进后出,后进先出
- defer函数传递参数的时候
defer函数调用时,就已经传递参数,函数代码暂时不执行
- 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 协议》,转载必须注明作者和本文链接