12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Copyright 2011 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.
- // This file contains the code snippets included in "Defer, Panic, and Recover."
- package main
- import "fmt"
- import "io" // OMIT
- import "os" // OMIT
- func main() {
- f()
- fmt.Println("Returned normally from f.")
- }
- func f() {
- defer func() {
- if r := recover(); r != nil {
- fmt.Println("Recovered in f", r)
- }
- }()
- fmt.Println("Calling g.")
- g(0)
- fmt.Println("Returned normally from g.")
- }
- func g(i int) {
- if i > 3 {
- fmt.Println("Panicking!")
- panic(fmt.Sprintf("%v", i))
- }
- defer fmt.Println("Defer in g", i)
- fmt.Println("Printing in g", i)
- g(i + 1)
- }
- // STOP OMIT
- // Revised version.
- func CopyFile(dstName, srcName string) (written int64, err error) {
- src, err := os.Open(srcName)
- if err != nil {
- return
- }
- defer src.Close()
- dst, err := os.Create(dstName)
- if err != nil {
- return
- }
- defer dst.Close()
- return io.Copy(dst, src)
- }
- // STOP OMIT
|