func a() int { defer b() return 0 }
f, _ := os.Open(filename) defer f.Close()
func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } dst, err := os.Create(dstName) if err != nil { //1 return } written, err = io.Copy(dst, src) dst.Close() src.Close() return }
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) }
package main import ( "fmt" ) func main() { defer func() { if ok := recover(); ok != nil { fmt.Println("recover") } }() panic("error") }
defer func() { fmt.Println("1") }() defer func() { fmt.Println("2") }() defer func() { fmt.Println("3") }()
func a() { i := 0 defer fmt.Println(i) i++ return }
func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret } func main() { a := 1 b := 2 defer calc("1", a, calc("10", a, b)) a = 0 return }
10 1 2 3 1 1 3 4
func c() (i int) { defer func() { i++ }() return 1 }
被 defer 的函数是在 return 之后执行,可以修改带名称的返回值,上面的函数 c 返回的是 2。
以上就是详细介绍golang中defer的关键特性的详细内容,更多请关注Gxl网其它相关文章!
查看更多关于详细介绍golang中defer的关键特性的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did84596