github.com/huandu/go@v0.0.0-20151114150818-04e615e41150/doc/progs/defer.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // This file contains the code snippets included in "Defer, Panic, and Recover." 6 7 package main 8 9 import ( 10 "fmt" 11 "io" 12 "os" 13 ) 14 15 func a() { 16 i := 0 17 defer fmt.Println(i) 18 i++ 19 return 20 } 21 22 // STOP OMIT 23 24 func b() { 25 for i := 0; i < 4; i++ { 26 defer fmt.Print(i) 27 } 28 } 29 30 // STOP OMIT 31 32 func c() (i int) { 33 defer func() { i++ }() 34 return 1 35 } 36 37 // STOP OMIT 38 39 // Initial version. 40 func CopyFile(dstName, srcName string) (written int64, err error) { 41 src, err := os.Open(srcName) 42 if err != nil { 43 return 44 } 45 46 dst, err := os.Create(dstName) 47 if err != nil { 48 return 49 } 50 51 written, err = io.Copy(dst, src) 52 dst.Close() 53 src.Close() 54 return 55 } 56 57 // STOP OMIT 58 59 func main() { 60 a() 61 b() 62 fmt.Println() 63 fmt.Println(c()) 64 }