Sobes.tech
Middle

V jakém pořadí se v Go provádějí odložené funkce (defer)?

sobes.tech AI

Odpověď od AI

Odložené funkce se vykonávají v opačném pořadí, než byly definovány, tedy LIFO (Last-In, First-Out).

package main

import "fmt"

func main() {
	defer fmt.Println("první") // Definováno jako poslední
	defer fmt.Println("druhý") // Definováno jako předposlední
	defer fmt.Println("třetí") // Definováno jako první
}

Výsledkem bude, že při spuštění tohoto kódu se vypíše:

třetí
druhý
první

Po opuštění scope (funkce), ve které bylo defer deklarováno, jsou odložené funkce volány v opačném pořadí. To je užitečné pro uvolnění zdrojů, zavření souborů, odemknutí mutexů a další operace čištění.