Sobes.tech
Junior — Middle

Εξηγήστε τον σκοπό και τη λειτουργία της δομής sync.Once στη Go.

sobes.tech AI

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

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

Αρχή λειτουργίας:

  • Το sync.Once περιέχει μια εσωτερική σημαία που παρακολουθεί αν η λειτουργία έχει ήδη εκτελεστεί.
  • Η μέθοδος Do(f func()) δέχεται μια λειτουργία f και διασφαλίζει ότι θα κληθεί μόνο μία φορά.
  • Αν πολλές goroutines καλέσουν το Do ταυτόχρονα, μόνο μία θα εκτελέσει τη λειτουργία, οι υπόλοιπες θα περιμένουν να ολοκληρωθεί.

Παράδειγμα:

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
}

Σε αυτό το παράδειγμα, το μήνυμα "Ολοκλήρωση αρχικοποίησης" θα εμφανιστεί ακριβώς μία φορά.