| 
             Як ми вже дізнались, основним механізмом роботи управлінням стану
в Go є, канали комунікації (або комунікація каналами).
Ми побачили це на прикладі “пулу працівників” на додадчу
до інших випадків.
Але існують і інші способи управління станом та асинхронністю,
розглянемо, наприклад, пакет   | 
          |
            ![]()  
          
           | 
        |
            
          
           | 
        |
            
          
           | 
        |
| 
             Ось ми використаємо беззнакове ціле для представлення нашого (завжди додатнього) лічильника.  | 
          
            
          
           | 
        
| 
             WaitGroup допоможе нам зачекати поки усі горутини завершать свою роботу.  | 
          
            
          
           | 
        
| 
             Для симуляції одночасних оновлень, ми запускаємо 50 горутин, які оновлюватимуть лічильник рівно 1000 разів.  | 
          
            
          
           | 
        
| 
             To atomically increment the counter we use   | 
          
            
          
           | 
        
            
          
           | 
        |
            
          
           | 
        |
| 
             Чекаємо поки усі горутини не відпрацюють.  | 
          
            
          
           | 
        
| 
             Жодна горутина не записує до ‘ops’, але використаємо
  | 
          |
            
          
           | 
        
| 
             Ми очікувано отримали рівно 50000 операцій.
Як би ми використали не атомарний ‘ops++’
числа б - були інші. Ми доречі можемо
отримувати дані про стан гонки даних
коли запускаємо з прапорцем    | 
          
            
          
           | 
        
| 
             Надалі ми ознайомимось з   | 
          
Наступний приклад: Взаємні Виключення (Mutexes).