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
}
Σε αυτό το παράδειγμα, το μήνυμα "Ολοκλήρωση αρχικοποίησης" θα εμφανιστεί ακριβώς μία φορά.