Defer statement
Urdhëri defer mundëson që një funksion 2 i thirrur nga një funksion 1 të ekzekutohet menjëherë para udhërit return të funksionit 1. Pra, thirrjen e funksionit 2 mund ta vendosim kudo brenda bllokut të funksionit 1, por ai do të ekzekutohet fare ne fund të funksionit.
1 package main
2
3 import (
4 "fmt"
5 )
6
7 func main() {
8 defer funksioni1()
9 funksioni2()
10 }
11
12 func funksioni1() {
13 fmt.Println("Funksioni 1")
14 }
15
16 func funksioni2() {
17 fmt.Println("Funksioni 2")
18 }
https://play.golang.org/p/URvBJ0CPxw3
Rezultati:
Funksioni 2
Funksioni 1
Kjo është e dobishme në situatat kur dëshirojmë të sigurohemi që një funksion i dytë do të ekzekutohet në fund të një funksioni, siç është rasti i mbylljes së koneksionit me databazë.
Radha e ekzekutimit të defer të shumëfishtë
Nëse kemi më tepër se një thirrje të funksioneve me defer, do të zbatohet ekzekutim revers, gjegjësisht renditja LIFO (last in, first out), d.m.th. ai funksion që bëhet defer në fund, ekzekutohet i pari.
1 package main
2
3 import (
4 "fmt"
5 )
6
7 func main() {
8 defer funksioni1()
9 funksioni2()
10 defer funksioni3()
11 }
12
13 func funksioni1() {
14 fmt.Println("Funksioni 1")
15 }
16
17 func funksioni2() {
18 fmt.Println("Funksioni 2")
19 }
20
21 func funksioni3() {
22 fmt.Println("Funksioni 3")
23 }
https://play.golang.org/p/eaBVdkBaoD-
Rezultati:
Funksioni 2
Funksioni 3
Funksioni 1