Senior
1. Ką tai rodys, kaip pataisyti, kaip padaryti srautą apsaugotą (waitGroup) 2. Dublikatus iš sąrašo pašalinti
sobes.tech AI
Atsakymas iš AI
- Ką rodys, kaip pataisyti, kaip padaryti srauto apsaugotą (waitGroup)
Be konkretaus kodo sunku tiksliai pasakyti, bet dažna klaida su sync.WaitGroup Go kalboje yra netinkamas Add, Done ir Wait metodų naudojimas, kas gali sukelti paniką arba deadlock'ą.
Tinkamas pavyzdys:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// darbas
}()
wg.Wait()
Svarbu iškviesti Add prieš pradedant gorutinas, kad išvengtumėte varžybų sąlygų.
Kad būtų srauto apsaugota, reikia teisingai sinchronizuoti prieigą prie bendrų duomenų, pvz., naudojant mutexus ar kanalus.
- Dublikatų pašalinimas iš sąrašo
Pavyzdinė funkcija, skirta pašalinti dublikatų iš eilutės sąrašo:
func removeDuplicates(slice []string) []string {
seen := make(map[string]struct{})
result := []string{}
for _, v := range slice {
if _, ok := seen[v]; !ok {
seen[v] = struct{}{}
result = append(result, v)
}
}
return result
}
Kitiems tipams galima naudoti panašią prieigą su žemėlapiu, sekant unikalius elementus.