Created
August 4, 2012 11:45
-
-
Save wendal/3256924 to your computer and use it in GitHub Desktop.
golang中defer对return的影响
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0 *ast.File { | |
1 . Package: 2:1 | |
2 . Name: *ast.Ident { | |
3 . . NamePos: 2:9 | |
4 . . Name: "main" | |
5 . } | |
6 . Decls: []ast.Decl (len = 3) { | |
7 . . 0: *ast.FuncDecl { | |
8 . . . Name: *ast.Ident { | |
9 . . . . NamePos: 3:6 | |
10 . . . . Name: "main" | |
11 . . . . Obj: *ast.Object { | |
12 . . . . . Kind: func | |
13 . . . . . Name: "main" | |
14 . . . . . Decl: *(obj @ 7) | |
15 . . . . } | |
16 . . . } | |
17 . . . Type: *ast.FuncType { | |
18 . . . . Func: 3:1 | |
19 . . . . Params: *ast.FieldList { | |
20 . . . . . Opening: 3:10 | |
21 . . . . . Closing: 3:11 | |
22 . . . . } | |
23 . . . } | |
24 . . . Body: *ast.BlockStmt { | |
25 . . . . Lbrace: 3:13 | |
26 . . . . List: []ast.Stmt (len = 3) { | |
27 . . . . . 0: *ast.ExprStmt { | |
28 . . . . . . X: *ast.CallExpr { | |
29 . . . . . . . Fun: *ast.Ident { | |
30 . . . . . . . . NamePos: 4:1 | |
31 . . . . . . . . Name: "println" | |
32 . . . . . . . } | |
33 . . . . . . . Lparen: 4:8 | |
34 . . . . . . . Args: []ast.Expr (len = 1) { | |
35 . . . . . . . . 0: *ast.BasicLit { | |
36 . . . . . . . . . ValuePos: 4:9 | |
37 . . . . . . . . . Kind: STRING | |
38 . . . . . . . . . Value: "\"Hello, World!\"" | |
39 . . . . . . . . } | |
40 . . . . . . . } | |
41 . . . . . . . Ellipsis: - | |
42 . . . . . . . Rparen: 4:24 | |
43 . . . . . . } | |
44 . . . . . } | |
45 . . . . . 1: *ast.ExprStmt { | |
46 . . . . . . X: *ast.CallExpr { | |
47 . . . . . . . Fun: *ast.Ident { | |
48 . . . . . . . . NamePos: 5:1 | |
49 . . . . . . . . Name: "df" | |
50 . . . . . . . . Obj: *ast.Object { | |
51 . . . . . . . . . Kind: func | |
52 . . . . . . . . . Name: "df" | |
53 . . . . . . . . . Decl: *ast.FuncDecl { | |
54 . . . . . . . . . . Name: *ast.Ident { | |
55 . . . . . . . . . . . NamePos: 9:6 | |
56 . . . . . . . . . . . Name: "df" | |
57 . . . . . . . . . . . Obj: *(obj @ 50) | |
58 . . . . . . . . . . } | |
59 . . . . . . . . . . Type: *ast.FuncType { | |
60 . . . . . . . . . . . Func: 9:1 | |
61 . . . . . . . . . . . Params: *ast.FieldList { | |
62 . . . . . . . . . . . . Opening: 9:8 | |
63 . . . . . . . . . . . . Closing: 9:9 | |
64 . . . . . . . . . . . } | |
65 . . . . . . . . . . . Results: *ast.FieldList { | |
66 . . . . . . . . . . . . Opening: - | |
67 . . . . . . . . . . . . List: []*ast.Field (len = 1) { | |
68 . . . . . . . . . . . . . 0: *ast.Field { | |
69 . . . . . . . . . . . . . . Type: *ast.Ident { | |
70 . . . . . . . . . . . . . . . NamePos: 9:11 | |
71 . . . . . . . . . . . . . . . Name: "int" | |
72 . . . . . . . . . . . . . . } | |
73 . . . . . . . . . . . . . } | |
74 . . . . . . . . . . . . } | |
75 . . . . . . . . . . . . Closing: - | |
76 . . . . . . . . . . . } | |
77 . . . . . . . . . . } | |
78 . . . . . . . . . . Body: *ast.BlockStmt { | |
79 . . . . . . . . . . . Lbrace: 9:15 | |
80 . . . . . . . . . . . List: []ast.Stmt (len = 3) { | |
81 . . . . . . . . . . . . 0: *ast.AssignStmt { | |
82 . . . . . . . . . . . . . Lhs: []ast.Expr (len = 1) { | |
83 . . . . . . . . . . . . . . 0: *ast.Ident { | |
84 . . . . . . . . . . . . . . . NamePos: 10:9 | |
85 . . . . . . . . . . . . . . . Name: "i" | |
86 . . . . . . . . . . . . . . . Obj: *ast.Object { | |
87 . . . . . . . . . . . . . . . . Kind: var | |
88 . . . . . . . . . . . . . . . . Name: "i" | |
89 . . . . . . . . . . . . . . . . Decl: *(obj @ 81) | |
90 . . . . . . . . . . . . . . . } | |
91 . . . . . . . . . . . . . . } | |
92 . . . . . . . . . . . . . } | |
93 . . . . . . . . . . . . . TokPos: 10:11 | |
94 . . . . . . . . . . . . . Tok: := | |
95 . . . . . . . . . . . . . Rhs: []ast.Expr (len = 1) { | |
96 . . . . . . . . . . . . . . 0: *ast.BasicLit { | |
97 . . . . . . . . . . . . . . . ValuePos: 10:14 | |
98 . . . . . . . . . . . . . . . Kind: INT | |
99 . . . . . . . . . . . . . . . Value: "0" | |
100 . . . . . . . . . . . . . . } | |
101 . . . . . . . . . . . . . } | |
102 . . . . . . . . . . . . } | |
103 . . . . . . . . . . . . 1: *ast.DeferStmt { | |
104 . . . . . . . . . . . . . Defer: 11:9 | |
105 . . . . . . . . . . . . . Call: *ast.CallExpr { | |
106 . . . . . . . . . . . . . . Fun: *ast.FuncLit { | |
107 . . . . . . . . . . . . . . . Type: *ast.FuncType { | |
108 . . . . . . . . . . . . . . . . Func: 11:15 | |
109 . . . . . . . . . . . . . . . . Params: *ast.FieldList { | |
110 . . . . . . . . . . . . . . . . . Opening: 11:19 | |
111 . . . . . . . . . . . . . . . . . Closing: 11:20 | |
112 . . . . . . . . . . . . . . . . } | |
113 . . . . . . . . . . . . . . . } | |
114 . . . . . . . . . . . . . . . Body: *ast.BlockStmt { | |
115 . . . . . . . . . . . . . . . . Lbrace: 11:22 | |
116 . . . . . . . . . . . . . . . . List: []ast.Stmt (len = 1) { | |
117 . . . . . . . . . . . . . . . . . 0: *ast.IncDecStmt { | |
118 . . . . . . . . . . . . . . . . . . X: *ast.Ident { | |
119 . . . . . . . . . . . . . . . . . . . NamePos: 12:17 | |
120 . . . . . . . . . . . . . . . . . . . Name: "i" | |
121 . . . . . . . . . . . . . . . . . . . Obj: *(obj @ 86) | |
122 . . . . . . . . . . . . . . . . . . } | |
123 . . . . . . . . . . . . . . . . . . TokPos: 12:18 | |
124 . . . . . . . . . . . . . . . . . . Tok: ++ | |
125 . . . . . . . . . . . . . . . . . } | |
126 . . . . . . . . . . . . . . . . } | |
127 . . . . . . . . . . . . . . . . Rbrace: 13:9 | |
128 . . . . . . . . . . . . . . . } | |
129 . . . . . . . . . . . . . . } | |
130 . . . . . . . . . . . . . . Lparen: 13:10 | |
131 . . . . . . . . . . . . . . Ellipsis: - | |
132 . . . . . . . . . . . . . . Rparen: 13:11 | |
133 . . . . . . . . . . . . . } | |
134 . . . . . . . . . . . . } | |
135 . . . . . . . . . . . . 2: *ast.ReturnStmt { | |
136 . . . . . . . . . . . . . Return: 14:9 | |
137 . . . . . . . . . . . . . Results: []ast.Expr (len = 1) { | |
138 . . . . . . . . . . . . . . 0: *ast.Ident { | |
139 . . . . . . . . . . . . . . . NamePos: 14:16 | |
140 . . . . . . . . . . . . . . . Name: "i" | |
141 . . . . . . . . . . . . . . . Obj: *(obj @ 86) | |
142 . . . . . . . . . . . . . . } | |
143 . . . . . . . . . . . . . } | |
144 . . . . . . . . . . . . } | |
145 . . . . . . . . . . . } | |
146 . . . . . . . . . . . Rbrace: 15:1 | |
147 . . . . . . . . . . } | |
148 . . . . . . . . . } | |
149 . . . . . . . . } | |
150 . . . . . . . } | |
151 . . . . . . . Lparen: 5:3 | |
152 . . . . . . . Ellipsis: - | |
153 . . . . . . . Rparen: 5:4 | |
154 . . . . . . } | |
155 . . . . . } | |
156 . . . . . 2: *ast.ExprStmt { | |
157 . . . . . . X: *ast.CallExpr { | |
158 . . . . . . . Fun: *ast.Ident { | |
159 . . . . . . . . NamePos: 6:1 | |
160 . . . . . . . . Name: "df2" | |
161 . . . . . . . . Obj: *ast.Object { | |
162 . . . . . . . . . Kind: func | |
163 . . . . . . . . . Name: "df2" | |
164 . . . . . . . . . Decl: *ast.FuncDecl { | |
165 . . . . . . . . . . Name: *ast.Ident { | |
166 . . . . . . . . . . . NamePos: 17:6 | |
167 . . . . . . . . . . . Name: "df2" | |
168 . . . . . . . . . . . Obj: *(obj @ 161) | |
169 . . . . . . . . . . } | |
170 . . . . . . . . . . Type: *ast.FuncType { | |
171 . . . . . . . . . . . Func: 17:1 | |
172 . . . . . . . . . . . Params: *ast.FieldList { | |
173 . . . . . . . . . . . . Opening: 17:9 | |
174 . . . . . . . . . . . . Closing: 17:10 | |
175 . . . . . . . . . . . } | |
176 . . . . . . . . . . . Results: *ast.FieldList { | |
177 . . . . . . . . . . . . Opening: 17:12 | |
178 . . . . . . . . . . . . List: []*ast.Field (len = 1) { | |
179 . . . . . . . . . . . . . 0: *ast.Field { | |
180 . . . . . . . . . . . . . . Names: []*ast.Ident (len = 1) { | |
181 . . . . . . . . . . . . . . . 0: *ast.Ident { | |
182 . . . . . . . . . . . . . . . . NamePos: 17:13 | |
183 . . . . . . . . . . . . . . . . Name: "i" | |
184 . . . . . . . . . . . . . . . . Obj: *ast.Object { | |
185 . . . . . . . . . . . . . . . . . Kind: var | |
186 . . . . . . . . . . . . . . . . . Name: "i" | |
187 . . . . . . . . . . . . . . . . . Decl: *(obj @ 179) | |
188 . . . . . . . . . . . . . . . . } | |
189 . . . . . . . . . . . . . . . } | |
190 . . . . . . . . . . . . . . } | |
191 . . . . . . . . . . . . . . Type: *ast.Ident { | |
192 . . . . . . . . . . . . . . . NamePos: 17:15 | |
193 . . . . . . . . . . . . . . . Name: "int" | |
194 . . . . . . . . . . . . . . } | |
195 . . . . . . . . . . . . . } | |
196 . . . . . . . . . . . . } | |
197 . . . . . . . . . . . . Closing: 17:18 | |
198 . . . . . . . . . . . } | |
199 . . . . . . . . . . } | |
200 . . . . . . . . . . Body: *ast.BlockStmt { | |
201 . . . . . . . . . . . Lbrace: 17:20 | |
202 . . . . . . . . . . . List: []ast.Stmt (len = 3) { | |
203 . . . . . . . . . . . . 0: *ast.AssignStmt { | |
204 . . . . . . . . . . . . . Lhs: []ast.Expr (len = 1) { | |
205 . . . . . . . . . . . . . . 0: *ast.Ident { | |
206 . . . . . . . . . . . . . . . NamePos: 18:9 | |
207 . . . . . . . . . . . . . . . Name: "i" | |
208 . . . . . . . . . . . . . . . Obj: *(obj @ 184) | |
209 . . . . . . . . . . . . . . } | |
210 . . . . . . . . . . . . . } | |
211 . . . . . . . . . . . . . TokPos: 18:11 | |
212 . . . . . . . . . . . . . Tok: = | |
213 . . . . . . . . . . . . . Rhs: []ast.Expr (len = 1) { | |
214 . . . . . . . . . . . . . . 0: *ast.BasicLit { | |
215 . . . . . . . . . . . . . . . ValuePos: 18:13 | |
216 . . . . . . . . . . . . . . . Kind: INT | |
217 . . . . . . . . . . . . . . . Value: "0" | |
218 . . . . . . . . . . . . . . } | |
219 . . . . . . . . . . . . . } | |
220 . . . . . . . . . . . . } | |
221 . . . . . . . . . . . . 1: *ast.DeferStmt { | |
222 . . . . . . . . . . . . . Defer: 19:9 | |
223 . . . . . . . . . . . . . Call: *ast.CallExpr { | |
224 . . . . . . . . . . . . . . Fun: *ast.FuncLit { | |
225 . . . . . . . . . . . . . . . Type: *ast.FuncType { | |
226 . . . . . . . . . . . . . . . . Func: 19:15 | |
227 . . . . . . . . . . . . . . . . Params: *ast.FieldList { | |
228 . . . . . . . . . . . . . . . . . Opening: 19:19 | |
229 . . . . . . . . . . . . . . . . . Closing: 19:20 | |
230 . . . . . . . . . . . . . . . . } | |
231 . . . . . . . . . . . . . . . } | |
232 . . . . . . . . . . . . . . . Body: *ast.BlockStmt { | |
233 . . . . . . . . . . . . . . . . Lbrace: 19:22 | |
234 . . . . . . . . . . . . . . . . List: []ast.Stmt (len = 1) { | |
235 . . . . . . . . . . . . . . . . . 0: *ast.IncDecStmt { | |
236 . . . . . . . . . . . . . . . . . . X: *ast.Ident { | |
237 . . . . . . . . . . . . . . . . . . . NamePos: 20:17 | |
238 . . . . . . . . . . . . . . . . . . . Name: "i" | |
239 . . . . . . . . . . . . . . . . . . . Obj: *(obj @ 184) | |
240 . . . . . . . . . . . . . . . . . . } | |
241 . . . . . . . . . . . . . . . . . . TokPos: 20:18 | |
242 . . . . . . . . . . . . . . . . . . Tok: ++ | |
243 . . . . . . . . . . . . . . . . . } | |
244 . . . . . . . . . . . . . . . . } | |
245 . . . . . . . . . . . . . . . . Rbrace: 21:9 | |
246 . . . . . . . . . . . . . . . } | |
247 . . . . . . . . . . . . . . } | |
248 . . . . . . . . . . . . . . Lparen: 21:10 | |
249 . . . . . . . . . . . . . . Ellipsis: - | |
250 . . . . . . . . . . . . . . Rparen: 21:11 | |
251 . . . . . . . . . . . . . } | |
252 . . . . . . . . . . . . } | |
253 . . . . . . . . . . . . 2: *ast.ReturnStmt { | |
254 . . . . . . . . . . . . . Return: 22:9 | |
255 . . . . . . . . . . . . } | |
256 . . . . . . . . . . . } | |
257 . . . . . . . . . . . Rbrace: 23:1 | |
258 . . . . . . . . . . } | |
259 . . . . . . . . . } | |
260 . . . . . . . . } | |
261 . . . . . . . } | |
262 . . . . . . . Lparen: 6:4 | |
263 . . . . . . . Ellipsis: - | |
264 . . . . . . . Rparen: 6:5 | |
265 . . . . . . } | |
266 . . . . . } | |
267 . . . . } | |
268 . . . . Rbrace: 7:1 | |
269 . . . } | |
270 . . } | |
271 . . 1: *(obj @ 53) | |
272 . . 2: *(obj @ 164) | |
273 . } | |
274 . Scope: *ast.Scope { | |
275 . . Objects: map[string]*ast.Object (len = 3) { | |
276 . . . "df": *(obj @ 50) | |
277 . . . "main": *(obj @ 11) | |
278 . . . "df2": *(obj @ 161) | |
279 . . } | |
280 . } | |
281 . Unresolved: []*ast.Ident (len = 3) { | |
282 . . 0: *(obj @ 29) | |
283 . . 1: *(obj @ 69) | |
284 . . 2: *(obj @ 191) | |
285 . } | |
286 } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment