Skip to content

Instantly share code, notes, and snippets.

@wendal
Created August 4, 2012 11:45
Show Gist options
  • Save wendal/3256924 to your computer and use it in GitHub Desktop.
Save wendal/3256924 to your computer and use it in GitHub Desktop.
golang中defer对return的影响
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