Mengapa Goroutine Saya Tidak Berjalan?
Dalam bidang pengaturcaraan Go, goroutine menyediakan mekanisme yang berkuasa untuk pelaksanaan serentak. Walau bagaimanapun, kadangkala goroutine ini mungkin kelihatan tidak responsif, menyebabkan pembangun berada dalam keadaan kekeliruan.
Senario:
Pertimbangkan kod Go berikut yang cuba membuat goroutine dan menghantar mesej melalui saluran:
<code class="go">package main import "fmt" func main(){ messages := make(chan string,3) messages <- "one" messages <- "two" messages <- "three" go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages) fmt.Println("Done!") }</code>
Apabila melaksanakan kod ini, output mungkin mengejutkan:
Done!
Masalahnya:
Walaupun mencipta goroutine, kod itu tidak pernah melaksanakan pernyataan di dalamnya. Sebabnya terletak pada penamatan program utama. Dalam Go, goroutine berjalan secara bebas daripada fungsi utama. Sebaik sahaja program utama keluar, semua goroutine yang sedang berjalan ditamatkan, walaupun mereka tidak mempunyai peluang untuk melaksanakan.
Penyelesaian:
Untuk mengelakkan goroutine daripada ditamatkan sebelum waktunya, program utama mesti terus hidup sehingga goroutine selesai kerjanya. Terdapat beberapa pendekatan untuk mencapai ini:
Cadangan:
Untuk pemahaman yang lebih menyeluruh tentang tingkah laku dan kesesuaian goroutine dalam Pergi, sangat disyorkan untuk membaca catatan blog yang sangat baik di blog Golang: "Concurrency in Go."
Atas ialah kandungan terperinci Mengapa Goroutine Saya Ditamatkan Sebelum Pelaksanaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!