Defer

Defer

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.

package main

import (
    "fmt"
)

func main() {
    defer funksioni1()
    funksioni2()
}

func funksioni1() {
    fmt.Println("Funksioni 1")
}

func funksioni2() {
    fmt.Println("Funksioni 2")
}

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.

package main

import (
    "fmt"
)

func main() {
    defer funksioni1()
    funksioni2()
    defer funksioni3()
}

func funksioni1() {
    fmt.Println("Funksioni 1")
}

func funksioni2() {
    fmt.Println("Funksioni 2")
}

func funksioni3() {
    fmt.Println("Funksioni 3")
}

https://play.golang.org/p/eaBVdkBaoD-

Rezultati:

Funksioni 2
Funksioni 3
Funksioni 1

Urdhërat/funksionet me defer ekzekutohen edhe kur ka panic, d.m.th. edhe nëse gjatë ekzekutimit të programit është lajmëruar gabim i nivelit panic, gjë që mund të jetë e dobishme në situata të caktuara ku nevojitet të ndërmirret diçka para se të shfaqet raporti i gabimit.

All Rights Reserved Theme by 404 THEME.