Sobes.tech
Middle

Σε ποια σειρά εκτελούνται οι καθυστερημένες λειτουργίες (defer) στο Go;

sobes.tech AI

Απάντηση από AI

Οι καθυστερημένες συναρτήσεις εκτελούνται με την αντίστροφη σειρά από αυτήν που ορίστηκαν, δηλαδή LIFO (Last-In, First-Out).

package main

import "fmt"

func main() {
	defer fmt.Println("πρώτο") // Ορίστηκε τελευταίο
	defer fmt.Println("δεύτερο") // Ορίστηκε προτελευταίο
	defer fmt.Println("τρίτο") // Ορίστηκε πρώτο
}

Ως αποτέλεσμα, κατά την εκτέλεση αυτού του κώδικα, θα εμφανιστεί:

τρίτο
δεύτερο
πρώτο

Όταν βγείτε από το scope (συνάρτηση) όπου δηλώθηκε το defer, οι καθυστερημένες συναρτήσεις καλούνται με την αντίστροφη σειρά. Αυτό είναι χρήσιμο για την απελευθέρωση πόρων, το κλείσιμο αρχείων, την ξεκλείδωμα mutex και άλλες λειτουργίες καθαρισμού.