Sobes.tech
Senior

əsas paket import ( "fmt" "sync" ) func main() { for i := 0; i < 5; i++ { go fmt.Println(i) } }

sobes.tech Süni İntellekt

AI-dan cavab

Bu kodda, hər biri i dəyişəninin dəyərini çıxaran 5 goroutin işə salınır. Ancaq, i dəyişəni bağlamda istifadə olunduğu və dövr ərzində dəyişdiyi üçün, bütün goroutinlar eyni dəyəri — adətən 5 — çıxara bilər, çünki fmt.Println(i) icra edilən zaman dövr artıq başa çatıb.

Bunu düzəltmək üçün, i-nin cari dəyərini goroutine-ə parametr kimi keçirmək lazımdır, məsələn:

for i := 0; i < 5; i++ {
	go func(n int) {
		fmt.Println(n)
	}(i)
}

Beləliklə, hər bir goroutine öz nüsxəsini alacaq və 0-dan 4-ə qədər olan ədədləri çıxaracaq.

Həmçinin, orijinal kodda proqramın goroutinlar çıxışını yerinə yetirmədən əvvəl bitməsi mümkündür, ona görə də çox vaxt sync.WaitGroup və ya başqa bir üsul istifadə edilir, beləliklə goroutinların tamamlanması gözlənir.