Sobes.tech
Middle

W jakiej kolejności wykonywane są odłożone funkcje (defer) w Go?

sobes.tech AI

Odpowiedź od AI

Funkcje odroczone są wykonywane w kolejności odwrotnej do ich definicji, czyli LIFO (Last-In, First-Out).

package main

import "fmt"

func main() {
	defer fmt.Println("pierwszy") // Zdefiniowany jako ostatni
	defer fmt.Println("drugi") // Zdefiniowany jako przedostatni
	defer fmt.Println("trzeci") // Zdefiniowany jako pierwszy
}

W wyniku wykonania tego kodu zostanie wyświetlone:

trzeci
drugi
pierwszy

Po wyjściu z zakresu (funkcji), w którym zadeklarowano defer, odroczone funkcje są wywoływane w kolejności odwrotnej. Jest to przydatne do zwalniania zasobów, zamykania plików, odblokowywania mutexów i innych operacji sprzątających.