cpp

Структура Once: выполнение функции один раз

Структура Once из пакета sync реализует возможность вызова функции один раз. Она содержит только один метод Do(), который в качестве параметра принимает ссылку на функцию. Внутри этой функции можно выполнить инициализацию каких-либо значений. Формат метода:

(*sync.Once).Do(f func())

Пример использования структуры Once приведен в листинге 18.7.

Листинг 18.7. Структура Once

package main

import (
   "fmt"
   "sync"
   "time"
)

func main() {
   var wg sync.WaitGroup
   var once sync.Once
   for i := 1; i < 4; i++ {
      wg.Add(1)
      go func(n int) {
         defer wg.Done()
         for j := 1; j < 11; j++ {
            once.Do(func() {
               fmt.Println("sync.Once")
            })
            fmt.Println("Поток:", n, "j =", j)
            time.Sleep(time.Second) // Имитация выполнения задачи
         }
      }(i)
   }
   wg.Wait()
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp