在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.defer的用法defer的特点就是先入后出,所以在执行完正常语句后,在倒序执行defer package main import ( "fmt" "./feibo" "os" "bufio" ) //闭包的使用,闭包分为自由变量和局部变量,对于sum来说就是自由变量,他不在return的函数体中,v是局部变量 func adder() func(int) (int, int, int) { sum := 0 return func(v int) (int, int, int) { //s会保存上次执行的sum,可以看出是怎么累加的 s := sum sum += v return sum, v, s } } func wirte(name string) bool { //创建一个文件,file是创建文件的指针 file, err := os.Create(name) if err != nil { panic("没有创建成功") } //最后关闭 defer file.Close() //写入内存 //NewWriter 相当于 NewWriterSize(wr, 4096) NewWriterSize 将 wr 封装成一个拥有 size 大小缓存的 bufio.Writer 对象 writ := bufio.NewWriter(file) //稍后写入文件 //将缓存中的数据提交到底层的 io.Writer 中 defer writ.Flush() a := feibo.Fbnj() for i := 0; i < 10; i++ { fmt.Fprintln(writ, a()) } return true } func fff() { for i := 0; i < 20; i++ { if i == 15 { panic("你等于15了,不能玩了") } defer fmt.Println(i) } } func main() { //闭包调用 a := adder() for i := 5; i <= 10; i++ { fmt.Println(a(i)) } //调用外部的函数 j := feibo.Feibo() fmt.Println(j()) fmt.Println(j()) fmt.Println(j()) fmt.Println(j()) fmt.Println(j()) fmt.Println(j()) fmt.Println(j()) //defer的用法,当defer语句被执行时,跟在defer后面的函数会被延迟执行。它们的执行顺序与声明顺序相反。 //输出的结果是333 222 111 fmt.Println("defer的用法") fmt.Println(333) defer fmt.Println(111) defer fmt.Println(222) //写入斐波纳吉数列到文件 wirte("222.txt") //循环输出,并加入defer fmt.Println("以下是for的defer的用法") fff() } 结果展示: |
请发表评论