c := sync.NewCond(&sync.Mutex{})
var wg sync.WaitGroup
free := true
wg.Add(1)
go func() {
defer wg.Done()
c.L.Lock()
defer c.L.Unlock()
for !free { // Проверяем, что ресурс свободен
c.Wait()
}
fmt.Println("I'm created")
}()
free = false // Забрали ресурс, чтобы выполнить с ним работу
time.Sleep(1 * time.Second) // Эмуляция работы
free = true // Освободили ресурс
c.Signal() // Оповестили горутину
wg.Wait()