Sobes.tech
Middle

Kokiu būdu vykdomos atidėtos funkcijos (defer) Go?

sobes.tech AI

Atsakymas iš AI

Atidėtos funkcijos vykdomos atvirkštine tvarka nei buvo apibrėžtos, tai yra LIFO (Last-In, First-Out).

package main

import "fmt"

func main() {
	defer fmt.Println("pirmas") // Apibrėžtas paskutinis
	defer fmt.Println("antras") // Apibrėžtas prieš paskutinį
	defer fmt.Println("trečias") // Apibrėžtas pirmas
}

Rezultatas, vykdant šį kodą, bus:

trečias
antras
pirmas

Išeinant iš scope (funkcijos), kurioje buvo deklaruotas defer, atidėtos funkcijos kviečiamos atvirkštine tvarka. Tai naudinga resursų atlaisvinimui, failų uždarymui, mutexų atrakcinimui ir kitoms valymo operacijoms.