Fungsi dan Goroutine berinteraksi melalui mekanisme berikut dalam bahasa Go: Saluran: bertukar-tukar data dengan selamat antara Paip Goroutines: digunakan untuk berkomunikasi dengan proses luaran
Fungsi dalam bahasa Go berinteraksi dengan Mekanisme Goroutine
package main import ( "fmt" "math/rand" "sync" "time" ) const numIterations = 1000000 func main() { sum := 0 // 初始化互斥锁以保护并发的 sum 变量 lock := &sync.Mutex{} // 创建一个通道 c := make(chan int) // 创建 Goroutine 并发计算和并将结果发送到通道 for i := 0; i < numIterations; i++ { go func(num int) { rand.Seed(time.Now().UnixNano()) time.Sleep(time.Duration(rand.Intn(50)) * time.Millisecond) lock.Lock() defer lock.Unlock() sum += num c <- num }(i) } // 从通道接收数据并打印进度条 for i := 0; i < numIterations; i++ { <-c fmt.Printf("\rProgress: %f%", float64(i)/float64(numIterations)*100) } // 等待所有 Goroutine 完成 time.Sleep(time.Second) fmt.Println("\nFinal sum:", sum) }
sum
Fungsi utama membaca keputusan daripada paip dan mencetak bar kemajuan.
🎜🎜Melalui mekanisme ini, Goroutine boleh melaksanakan tugas penjumlahan secara serentak, dan fungsi utama boleh menjejaki kemajuan dan mengumpul hasil akhir. 🎜Atas ialah kandungan terperinci Apakah mekanisme interaksi antara fungsi golang dan goroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!