Menangkap Nilai Pulangan daripada Goroutines
Tidak seperti panggilan fungsi konvensional, goroutine dilaksanakan secara tidak segerak. Akibatnya, percubaan untuk menyimpan nilai pulangan goroutine secara langsung dalam pembolehubah, seperti yang dilihat dalam coretan kod, menghasilkan ralat penyusunan.
Sebab Ralat
Ralat berpunca daripada sifat percanggahan pelaksanaan tak segerak dan perolehan nilai segera. Apabila menggunakan goroutine dengan go, anda mengarahkan program untuk melaksanakan fungsi secara tidak segerak, tanpa menunggu selesai. Walau bagaimanapun, memperuntukkan nilai pulangan kepada pembolehubah memerlukan nilai itu tersedia dengan segera.
Saluran: Mekanisme Lulus Nilai Asynchronous
Untuk memintas pengehadan ini, saluran berfungsi sebagai perantara untuk pertukaran nilai antara goroutine. Saluran membenarkan anda menghantar nilai dari satu goroutine ke yang lain, membolehkan pengambilan nilai tak segerak tanpa memecah keselarasan.
Melaksanakan pendekatan berasaskan saluran, seperti yang ditunjukkan dalam kod di bawah, membolehkan anda menerima nilai daripada goroutine tanpa menjejaskannya sifat tak segerak:
func main() { c1 := make(chan string) c2 := make(chan string) go func() { time.Sleep(time.Second * 1) c1 <- "one" }() go func() { time.Sleep(time.Second * 2) c2 <- "two" }() for i := 0; i < 2; i++ { // Receive values from both channels concurrently select { case msg1 := <-c1: fmt.Println("received", msg1) case msg2 := <-c2: fmt.Println("received", msg2) } } }
Mesej-Melalui dan Teori CSP
Sistem pemesejan Go mendapat inspirasi daripada teori CSP (Communicating Sequential Processes). Pendekatan ini menggalakkan penghantaran mesej sebagai mekanisme komunikasi utama di kalangan proses bebas. Kod contoh mengikut prinsip CSP dengan menggunakan saluran untuk komunikasi tak segerak antara gorouti.
Atas ialah kandungan terperinci Bagaimanakah Saya Mendapatkan Nilai Pulangan daripada Goroutine yang Berjalan Secara Asynchronously dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!