defer"/>
Go学习:defer
defer的概念
defer调用再函数结束时发生,具体概念可以直接百度或者google详细搜索详细,这里主要是通过几个实例来对defer进行详解.
defer实例
实例1
package mainimport "fmt"func tryDefer() {defer fmt.Println(1)fmt.Println(2)
}func main() {// 2// 1tryDefer()
}
实例2
package mainimport "fmt"func tryDefer() {defer fmt.Println(1)defer fmt.Println(2)fmt.Println(3)
}func main() {// 3// 2// 1tryDefer()
}
实例3
package mainimport "fmt"func tryDefer() {defer fmt.Println(1)defer fmt.Println(2)fmt.Println(3)panic("error test")fmt.Println(4)
}func main() {// 3// 2// 1// panic: error testtryDefer()
}
实例4
package mainimport ("bufio""fmt""learngo/errhandling/fib""os"
)func writeFlie(fileName string) {file, err := os.Create(fileName)if err != nil {panic(err)}defer file.Close()writer := bufio.NewWriter(file)defer writer.Flush()f := fib.Fib()for i := 0; i < 20; i++ {fmt.Fprintln(writer,f())}
}func main() {writeFlie("fib.text")
}
package fibfunc Fib() func() int {a, b := 0, 1return func() int {a, b = b, a+breturn a + b}
}
实例5
package mainimport ("fmt"
)func tryDefer1() {for i := 0; i < 10; i++ {defer fmt.Println(i)if i == 5 {panic("error test")}}
}func main() {// 5// 4// 3// 2// 1// 0// panic: error testtryDefer1()
}
- defer调用确保调用再函数结束时发生
- 参数再defer语句时计算
- defer列表为后进先出
何时使用defer调用
- Open/Close
- Lock/Unlock
- PrintHeader/PrintFooter
更多推荐
Go学习:defer
发布评论