1
0
mirror of https://github.com/golang/go synced 2024-11-22 19:34:59 -07:00
go/doc/progs/defer2.go
Shenghou Ma cd54e44b50 doc: trivial comment typo fix
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5529080
2012-01-12 07:55:23 -08:00

59 lines
1.0 KiB
Go

// 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