Pengaturcaraan tak segerak membolehkan tugasan dilakukan tanpa menyekat utas utama. Bahasa Go menggunakan goroutine benang ringan dan saluran paip komunikasi untuk melaksanakan pengaturcaraan tak segerak. Goroutines dicipta dengan kata kunci pergi dan saluran digunakan untuk menghantar dan menerima data antara goroutine. Kes praktikal: Permintaan web serentak menggunakan saluran untuk menerima respons permintaan dan menghantar permintaan HTTP GET secara serentak melalui goroutine. Benang utama menerima respons daripada saluran dan mencetak hasilnya, meningkatkan prestasi program dan responsif.
Amalan pengaturcaraan tak segerak untuk fungsi bahasa Go
Pengaturcaraan tak segerak ialah teknik pengaturcaraan selari yang membolehkan pengaturcara melaksanakan pelbagai tugas tanpa menyekat utas utama. Dalam bahasa Go, pengaturcaraan tak segerak boleh dilaksanakan dengan mudah menggunakan goroutine
dan channel
. goroutine
和 channel
可以轻松地实现异步编程。
Goroutine
Goroutine 是 Go 语言中的轻量级线程。与传统线程不同,goroutine 非常轻量,并且由 Go 运行时管理。使用 go
Goroutine
Goroutine ialah benang ringan dalam bahasa Go. Tidak seperti benang tradisional, goroutine sangat ringan dan diurus oleh masa jalan Go. Goroutines boleh dibuat menggunakan kata kuncigo
. go func() { // 异步任务 }
channel
channel ialah saluran paip yang digunakan oleh bahasa Go untuk berkomunikasi antara goroutin. Saluran boleh digunakan untuk menghantar dan menerima data.ch := make(chan int) // 创建一个无缓冲 channel // 向 channel 发送数据 ch <- 42 // 从 channel 接收数据 x := <-ch
Kes praktikal: Permintaan web serentak
Berikut ialah kes praktikal permintaan web serentak tak segerak: 🎜package main import ( "fmt" "net/http" "time" ) func main() { // 创建一个 channel 来接收请求响应 results := make(chan string) // 发送并发请求 for i := 0; i < 10; i++ { go func(i int) { // 发送 HTTP GET 请求 resp, err := http.Get(fmt.Sprintf("https://example.com/%d", i)) if err != nil { results <- fmt.Sprintf("Error: %v", err) return } // 接收响应并发送结果 body, err := ioutil.ReadAll(resp.Body) if err != nil { results <- fmt.Sprintf("Error: %v", err) return } results <- fmt.Sprintf("Response: %s", string(body)) }(i) } // 接收并发请求的响应 for j := 0; j < 10; j++ { fmt.Println(<-results) } }
Atas ialah kandungan terperinci Amalan pengaturcaraan tak segerak bagi fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!