Go: example of the deferred execution
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* Go doesn't have object life event's, but it has defered execution et the "end of scope"
|
||||||
|
bash-3.2$ /usr/local/go/bin/go build lifetime.go
|
||||||
|
bash-3.2$ ./lifetime
|
||||||
|
main: started
|
||||||
|
defer-foo1: started
|
||||||
|
defer-foo1: ended
|
||||||
|
defer-foo0: started
|
||||||
|
defer-foo0: ended
|
||||||
|
inner-main: started
|
||||||
|
inner-main: ended
|
||||||
|
main: ended
|
||||||
|
defer-inner-main: started
|
||||||
|
defer-inner-main: ended
|
||||||
|
defer-main: started
|
||||||
|
defer-main: ended
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func foo() {
|
||||||
|
defer func() {
|
||||||
|
fmt.Println("defer-foo0: started");
|
||||||
|
fmt.Println("defer-foo0: ended");
|
||||||
|
}()
|
||||||
|
defer func() {
|
||||||
|
fmt.Println("defer-foo1: started");
|
||||||
|
fmt.Println("defer-foo1: ended");
|
||||||
|
}()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("main: started");
|
||||||
|
foo()
|
||||||
|
defer func() {
|
||||||
|
fmt.Println("defer-main: started");
|
||||||
|
fmt.Println("defer-main: ended");
|
||||||
|
}()
|
||||||
|
{
|
||||||
|
fmt.Println("inner-main: started");
|
||||||
|
defer func(){
|
||||||
|
fmt.Println("defer-inner-main: started");
|
||||||
|
fmt.Println("defer-inner-main: ended");
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
fmt.Println("inner-main: ended");
|
||||||
|
fmt.Println("main: ended");
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user