Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk melaksanakan baris gilir mesej dalam Goroutine?

Bagaimana untuk melaksanakan baris gilir mesej dalam Goroutine?

WBOY
Lepaskan: 2024-06-01 13:50:57
asal
570 orang telah melayarinya

Bagaimana untuk melaksanakan baris gilir mesej dalam Goroutine? Gunakan fungsi buat untuk mencipta saluran tidak buffer. Gunakan operator <- untuk menghantar mesej. Gunakan operator -> untuk menerima mesej.

如何在 Goroutine 中实现消息队列?

Bagaimana untuk melaksanakan baris gilir mesej dalam Goroutine?

Pengenalan

Goroutine dalam Go ialah primitif serentak ringan yang boleh digunakan untuk mencipta kod pelaksanaan selari. Baris gilir mesej ialah mekanisme komunikasi yang membolehkan Goroutines menghantar dan menerima mesej secara tidak segerak. Tutorial ini akan memperkenalkan cara menggunakan saluran untuk melaksanakan baris gilir mesej dalam Go dan menyediakan kes praktikal.

Melaksanakan baris gilir mesej

Saluran dalam Go ialah paip komunikasi dua hala yang boleh digunakan untuk memindahkan nilai antara Goroutines. Untuk membuat saluran, gunakan fungsi make. Contohnya: make 函数。例如:

ch := make(chan int)
Salin selepas log masuk

此代码创建一个无缓冲 channel,这意味着它一次只能容纳一个值。

发送消息

要发送消息,请使用 channel 的 <- 操作符。例如:

ch <- 42
Salin selepas log masuk

此代码将值 42 发送到 channel。

接收消息

要接收消息,请使用 channel 的 -> 操作符。例如:

msg := <-ch
Salin selepas log masuk

此代码将从 channel 接收一个值并将其存储在 msg

package main

import "time"

func main() {
    ch := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            ch <- i
            time.Sleep(time.Second)
        }
        close(ch)
    }()
}
Salin selepas log masuk

Kod ini mencipta saluran tidak buffer, bermakna ia hanya boleh menyimpan satu nilai pada satu masa.

Hantar mesej

Untuk menghantar mesej, gunakan operator <- saluran. Contohnya:

package main

import "time"

func main() {
    ch := make(chan int)
    go func() {
        for {
            msg, ok := <-ch
            if !ok {
                break
            }
            time.Sleep(time.Second)
            println(msg)
        }
    }()
}
Salin selepas log masuk
Kod ini menghantar nilai 42 ke saluran.

Terima mesej

Untuk menerima mesej, gunakan operator -> saluran. Contohnya:

rrreee

Kod ini akan menerima nilai daripada saluran dan menyimpannya dalam pembolehubah msg. 🎜🎜🎜Kes Praktikal🎜🎜🎜Mari kita cipta aplikasi pengeluar-pengguna yang mudah, di mana pengeluar Goroutine akan menghantar mesej, dan pengguna Goroutine akan menerima dan memproses mesej ini. 🎜🎜🎜Kod pengeluar🎜🎜rrreee🎜🎜Kod pengguna🎜🎜rrreee🎜Dalam contoh ini, pengeluar menghantar satu mesej ke saluran setiap saat, dan pengguna menerima dan memproses mesej ini daripada saluran pada kekerapan yang sama . 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan baris gilir mesej dalam Goroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan