Skip to content

Commit ca0c426

Browse files
committed
update defer
1 parent 701c4fc commit ca0c426

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

1.14/defer.md

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,43 @@
11
# 1.14 defer
22

3-
TODO
3+
在 Go 1.14 中,增加了一种新的 defer 实现:open coded defer。当函数内 defer 不超过 8 个时,则会使用这种实现。
4+
5+
```go
6+
package main
7+
8+
import "fmt"
9+
10+
var i = 100
11+
12+
func main() {
13+
if i == 0 {
14+
defer fmt.Println("1")
15+
}
16+
17+
if i == 1 {
18+
defer fmt.Println("2")
19+
}
20+
21+
if i == 2 {
22+
defer fmt.Println("3")
23+
}
24+
25+
if i == 3 {
26+
defer fmt.Println("4")
27+
}
28+
29+
if i == 4 {
30+
defer fmt.Println("5")
31+
}
32+
33+
if i == 5 {
34+
defer fmt.Println("6")
35+
}
36+
}
37+
38+
```
39+
40+
可以分析上面的代码生成的汇编来理解这个新版的 open coded defer 到底是怎么实现的:
41+
42+
```
43+
```

0 commit comments

Comments
 (0)