Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Mendapatkan Nilai Pulangan daripada Goroutine yang Berjalan Secara Asynchronously dalam Go?

Bagaimanakah Saya Mendapatkan Nilai Pulangan daripada Goroutine yang Berjalan Secara Asynchronously dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-26 01:03:11
asal
317 orang telah melayarinya

How Do I Retrieve Return Values from Asynchronously Running Goroutines in Go?

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)
        }
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan