Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε την έννοια του 'Once' στη γλώσσα Go και σε ποιες περιπτώσεις εφαρμόζεται;

sobes.tech AI

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

Στη γλώσσα Go, το sync.Once είναι μια δομή που διασφαλίζει ότι μια συγκεκριμένη λειτουργία θα εκτελεστεί μόνο μία φορά, ακόμη και αν η κλήση προέρχεται ταυτόχρονα από πολλές goroutines. Αυτό είναι χρήσιμο για την αρχικοποίηση πόρων που πρέπει να δημιουργηθούν μόνο μία φορά, όπως η εγκατάσταση μιας σύνδεσης με μια βάση δεδομένων ή η φόρτωση μιας διαμόρφωσης.

Παράδειγμα χρήσης:

var once sync.Once

func initialize() {
    fmt.Println("Ολοκλήρωση αρχικοποίησης")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Περιμένουμε να ολοκληρωθούν οι goroutines
}

Σε αυτό το παράδειγμα, η λειτουργία initialize θα κληθεί ακριβώς μία φορά, ανεξάρτητα από τον αριθμό των goroutines.