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  }