|  | // $G $F.go && $L $F.$A && ./$A.out | 
|  |  | 
|  | // Copyright 2009 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "fmt" | 
|  |  | 
|  | var result string | 
|  |  | 
|  | func addInt(i int) { | 
|  | result += fmt.Sprint(i) | 
|  | } | 
|  |  | 
|  | func test1helper() { | 
|  | for i := 0; i < 10; i++ { | 
|  | defer addInt(i) | 
|  | } | 
|  | } | 
|  |  | 
|  | func test1() { | 
|  | result = ""; | 
|  | test1helper(); | 
|  | if result != "9876543210" { | 
|  | fmt.Printf("test1: bad defer result (should be 9876543210): %q\n", result); | 
|  | } | 
|  | } | 
|  |  | 
|  | func addDotDotDot(v ...) { | 
|  | result += fmt.Sprint(v) | 
|  | } | 
|  |  | 
|  | func test2helper() { | 
|  | for i := 0; i < 10; i++ { | 
|  | defer addDotDotDot(i) | 
|  | } | 
|  | } | 
|  |  | 
|  | func test2() { | 
|  | result = ""; | 
|  | test2helper(); | 
|  | if result != "9876543210" { | 
|  | fmt.Printf("test2: bad defer result (should be 9876543210): %q\n", result); | 
|  | } | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | test1(); | 
|  | test2(); | 
|  | } |