Sobes.tech
Junior

Go'да WaitGroup эмне үчүн колдонулат?

sobes.tech AI

AIден жооп

WaitGroup бир же бир нече goroutine ишин синхрондоштуруу үчүн колдонулат. Бул негизги goroutine башка түзүлгөн goroutine'лердин аяктоо убактысын күтүүгө мүмкүндүк берет. Ал эсептегичтен турат, ал goroutine түзүлгөндө көбөйөт жана аяктагандан кийин азайтылат.

Негизги ыкмалары:

  • Add(delta int): Goroutine санын көбөйтөт же азайтат.
  • Done(): Санакты 1ге азайтат. Адатта, goroutine аяктагандан кийин чакырылат (көп учурда defer менен).
  • Wait(): Санак нөлгө жеткенче ишти токтотот.

Колдонуу мисалы:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Goroutine аяктагандан кийин санакты азайтат

	fmt.Printf("Goroutine %d башталды\n", id)
	// Ишти имитациялоо
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d аяктады\n", id)
}

func main() {
	var wg sync.WaitGroup // WaitGroup түзүү

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Ар бир goroutine үчүн санакты көбөйтүү
		go worker(i, &wg) // Goroutine'ду ишке киргизүү, көрсөткүчтү берүү
	}

	wg.Wait() // Санак нөлгө жеткенче күтүү (бардык goroutine'дер аяктады)
	fmt.Println("Бардык goroutine'дер аяктады")
}