分享
关于golang的defer的练习
guhao123 · · 2366 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
golang的defer怎么说。大意就是在函数return后。函数关闭前。按照filo的顺序来执行的关键字
上代码:
package main import ( "fmt" ) func main() { // a() fmt.Println(c()) // b() // fmt.Println(d()) } func c() (i int) { defer func() { i++ }() defer fmt.Println("this:", i) return 1 } func a() { i := 0 defer fmt.Println(i) i = i + 1 } func b() { var whatever [5]struct{} for i := range whatever { // defer func() { fmt.Println(i) }() defer func(n int) { fmt.Println(n) }(i) } } func d() (i int) { defer fmt.Println("sdad") return 1 }
函数c() 的返回:
this: 0
2
函数a()的返回:
0
函数b()的返回:
4 3 2 1 0
函数d()的返回:
sdad
1
然后为了弄清楚到底是return前还是return后执行的。
package main import ( "fmt" ) func main() { test() } func test() (int, error) { defer fmt.Println("defer") return fmt.Println("return") }
输出的是:
return defer
豁然开朗。。就是return后执行的
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2366 次点击
下一篇:go语言开发入门
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
golang的defer怎么说。大意就是在函数return后。函数关闭前。按照filo的顺序来执行的关键字
上代码:
package main import ( "fmt" ) func main() { // a() fmt.Println(c()) // b() // fmt.Println(d()) } func c() (i int) { defer func() { i++ }() defer fmt.Println("this:", i) return 1 } func a() { i := 0 defer fmt.Println(i) i = i + 1 } func b() { var whatever [5]struct{} for i := range whatever { // defer func() { fmt.Println(i) }() defer func(n int) { fmt.Println(n) }(i) } } func d() (i int) { defer fmt.Println("sdad") return 1 }
函数c() 的返回:
this: 0
2
函数a()的返回:
0
函数b()的返回:
4 3 2 1 0
函数d()的返回:
sdad
1
然后为了弄清楚到底是return前还是return后执行的。
package main import ( "fmt" ) func main() { test() } func test() (int, error) { defer fmt.Println("defer") return fmt.Println("return") }
输出的是:
return defer
豁然开朗。。就是return后执行的