Menggunakan fungsi untuk mengendalikan operasi tak segerak terbahagi kepada tiga langkah: Cipta coroutine untuk melaksanakan blok kod secara serentak. Gunakan saluran untuk menghantar data, seperti hasil atau ralat, antara coroutine. Gunakan coroutine untuk melaksanakan tugas tak segerak dan menerima hasil daripada saluran.
Di Golang, menggunakan fungsi untuk mengendalikan operasi tak segerak adalah corak biasa. Fungsi boleh dijalankan sebagai coroutine, membenarkan blok kod dilaksanakan serentak tanpa menyekat utas utama.
Coroutines ialah urutan ringan yang boleh melaksanakan kod serentak tanpa membuat urutan sistem pengendalian baharu. Coroutine dicipta dengan kata kunci go
, diikuti dengan fungsi yang akan dilaksanakan:
go func() { // 异步代码在此处执行 }
Saluran ialah mekanisme komunikasi yang digunakan untuk menghantar data antara coroutine dan utas utama atau coroutine yang berbeza.
Untuk operasi tak segerak, anda boleh menggunakan saluran untuk menerima keputusan atau ralat pelaksanaan coroutine.
result := make(chan int) go func() { // 异步代码在此处执行 result <- resultValue }
Mari kita pertimbangkan kes praktikal di mana kita akan merangkak satu set URL secara serentak.
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { urls := []string{"url1", "url2", "url3"} results := make(chan string) // 为每个 URL 创建一个协程 for _, url := range urls { go func(url string) { // 爬取网页并发送结果到信道 resp, err := http.Get(url) if err != nil { results <- fmt.Sprintf("Error getting %s: %v", url, err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { results <- fmt.Sprintf("Error reading body of %s: %v", url, err) return } results <- fmt.Sprintf("Got body of %s: %s", url, string(body)) }(url) } // 从信道接收结果并打印 for i := 0; i < len(urls); i++ { fmt.Println(<-results) } }
Operasi tak segerak boleh dikendalikan dengan mudah di Golang menggunakan coroutine dan saluran. Ini berguna untuk mengendalikan tugas serentak, meningkatkan prestasi dan mengelak daripada menyekat utas utama.
Atas ialah kandungan terperinci Bagaimana untuk mengendalikan operasi tak segerak menggunakan fungsi Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!