Rumah >pembangunan bahagian belakang >Golang >Penciptaan dan pengurusan goroutine dalam fungsi Golang
Dalam bahasa Go, buat goroutine menggunakan kata kunci go ditambah panggilan fungsi. Apabila mengurus goroutine, gunakan sync.WaitGroup untuk penyegerakan; Dalam pertempuran sebenar, ia boleh digunakan untuk memproses permintaan rangkaian, pemprosesan imej dan tugas lain secara selari.
Goroutine (coroutine) ialah unit perlaksanaan selari yang ringan dalam bahasa Go yang boleh menjalankan berbilang tugas serentak dalam satu urutan.
Mencipta goroutine adalah sangat mudah Anda boleh menggunakan kata kunci go
diikuti dengan panggilan fungsi: go
关键字后跟一个函数调用即可:
func hello() { fmt.Println("Hello from goroutine") } func main() { go hello() // 创建一个执行 hello() 函数的 goroutine }
在处理共享资源时,需要对 goroutine 进行同步。使用 sync.WaitGroup
可以等待一组 goroutine 完成:
var wg sync.WaitGroup func hello(name string) { wg.Add(1) defer wg.Done() fmt.Println("Hello", name) } func main() { wg.Add(3) go hello("John") go hello("Mary") go hello("Bob") wg.Wait() // 等待所有 goroutine 完成 }
可以使用 context
import ( "context" "fmt" "time" ) func heavyComputation(ctx context.Context) { for { select { case <-ctx.Done(): fmt.Println("Computation cancelled") return default: // 执行计算 } } } func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() go heavyComputation(ctx) time.Sleep(10 * time.Second) // 10 秒后取消计算 }Pengurusan goroutine
sync.WaitGroup
untuk menunggu sekumpulan goroutin selesai: func main() { urls := []string{"https://example.com", "https://example.net", "https://example.org"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { resp, err := http.Get(url) if err != nil { log.Fatal(err) } resp.Body.Close() wg.Done() }(url) } wg.Wait() }
func main() { images := []string{"image1.jpg", "image2.jpg", "image3.jpg"} var wg sync.WaitGroup for _, image := range images { wg.Add(1) go func(image string) { img, err := image.Decode(image) if err != nil { log.Fatal(err) } // 处理图像 wg.Done() }(image) } wg.Wait() }Kes praktikal
Pemprosesan selari permintaan rangkaian:
🎜rrreee🎜🎜Pemprosesan selari pemprosesan imej: 🎜🎜rrreeeAtas ialah kandungan terperinci Penciptaan dan pengurusan goroutine dalam fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!