Junior — Senior
Синхронизация goroutine через sync.WaitGroup
livecode
Task condition
package main
import (
"fmt"
"sync"
"time"
)
func main() {
data := make(map[int]bool)
var wg sync.WaitGroup
wg.Add(3) // добавляем три горутины
go func() {
defer wg.Done()
data[1] = true
}()
go func() {
defer wg.Done()
data[1] = true
}()
go func() {
defer wg.Done()
data[1] = false
}()
wg.Wait() // ожидаем завершения всех горутин
fmt.Printf("%v", data[1])
}