File tree Expand file tree Collapse file tree 2 files changed +71
-1
lines changed Expand file tree Collapse file tree 2 files changed +71
-1
lines changed Original file line number Diff line number Diff line change @@ -1808,7 +1808,7 @@ func main() {
18081808
18091809在 if 的便捷语句定义的变量同样可以在任何对应的 else 块中使用。
18101810
1811- ** switch 的执行顺序:** 条件从上到下的执行,当匹配成功的时候停止。
1811+ ** switch 的执行顺序:** 条件从上到下的执行,当匹配成功的时候停止。
18121812
18131813` ` ` go
18141814package main
@@ -1855,6 +1855,43 @@ func main() {
18551855
18561856< /details>
18571857
1858+ < details>
1859+ < summary> defer 语句< /summary>
1860+
1861+ ` ` ` go
1862+ package main
1863+ import " fmt"
1864+ func main () {
1865+ // 2. 在输出 world
1866+ defer fmt.Println(" world" )
1867+ // 1. 先输出 hello
1868+ fmt.Println(" hello" )
1869+ }
1870+ ` ` `
1871+
1872+ > defer 语句会延迟函数的执行直到上层函数返回。
1873+ > 延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。
1874+
1875+ ** defer 栈**
1876+
1877+ 延迟的函数调用被压入一个栈中。当函数返回时, 会按照后进先出的顺序调用被延迟的函数调用。
1878+
1879+ ` ` ` go
1880+ package main
1881+ import " fmt"
1882+ func main () {
1883+ fmt.Println(" counting" )
1884+ for i := 0; i < 10; i++ {
1885+ defer fmt.Println(i)
1886+ }
1887+ fmt.Println(" done" )
1888+ }
1889+ ` ` `
1890+
1891+ 可以运行demo [defer](example/defer/defer.go) 查看效果。
1892+
1893+ < /details>
1894+
18581895# # 资源导航
18591896
18601897< details>
Original file line number Diff line number Diff line change 1+ package main
2+ import "fmt"
3+ func main () {
4+ // 2. 在输出 world
5+ defer fmt .Println ("world" )
6+ // 1. 先输出 hello
7+ fmt .Println ("hello" )
8+ // 输出结果
9+ // =======
10+ // hello
11+ // world
12+
13+
14+ fmt .Println ("counting" )
15+ for i := 0 ; i < 10 ; i ++ {
16+ defer fmt .Println (i )
17+ }
18+ fmt .Println ("done" )
19+ // 输出结果
20+ // =======
21+ // counting
22+ // done
23+ // 9
24+ // 8
25+ // 7
26+ // 6
27+ // 5
28+ // 4
29+ // 3
30+ // 2
31+ // 1
32+ // 0
33+ }
You can’t perform that action at this time.
0 commit comments