ホームページ バックエンド開発 Golang Goroutine でメッセージキューを実装するにはどうすればよいですか?

Goroutine でメッセージキューを実装するにはどうすればよいですか?

Jun 01, 2024 pm 01:50 PM
メッセージキュー

Goroutine でメッセージキューを実装するには? make 関数を使用してバッファなしチャネルを作成します。 <- 演算子を使用してメッセージを送信します。メッセージを受信するには、-> 演算子を使用します。

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

Goroutine でメッセージキューを実装するにはどうすればよいですか?

はじめに

Go のゴルーチンは、並列実行コードの作成に使用できる軽量の同時実行プリミティブです。メッセージ キューは、Goroutine がメッセージを非同期に送受信できるようにする通信メカニズムです。このチュートリアルでは、チャネルを使用して Go でメッセージ キューを実装する方法を紹介し、実践的なケースを示します。

メッセージキューの実装

Goのチャネルは、ゴルーチン間で値を転送するために使用できる双方向通信パイプです。チャネルを作成するには、make 関数を使用します。例: make 函数。例如:

1

ch := make(chan int)

ログイン後にコピー

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

发送消息

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

1

ch <- 42

ログイン後にコピー

此代码将值 42 发送到 channel。

接收消息

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

1

msg := <-ch

ログイン後にコピー

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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)

    }()

}

ログイン後にコピー

このコードはバッファリングされていないチャネルを作成します。これは、一度に 1 つの値しか保持できないことを意味します。

メッセージを送信する

メッセージを送信するには、チャネルの <- 演算子を使用します。例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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)

        }

    }()

}

ログイン後にコピー
このコードは、値 42 をチャネルに送信します。

メッセージを受信する

メッセージを受信するには、チャネルの -> 演算子を使用します。例:

rrreee

このコードはチャネルから値を受け取り、それを msg 変数に保存します。 🎜🎜🎜実践的なケース🎜🎜🎜単純なプロデューサー/コンシューマー アプリケーションを作成しましょう。プロデューサーの Goroutine がメッセージを送信し、コンシューマーの Goroutine がこれらのメッセージを受信して​​処理します。 🎜🎜🎜プロデューサー コード🎜🎜rrreee🎜🎜コンシューマー コード🎜🎜rrreee🎜 この例では、プロデューサーは 1 秒ごとに 1 つのメッセージをチャネルに送信し、コンシューマーは同じ頻度でチャネルからこれらのメッセージを受信して​​処理します。 🎜

以上がGoroutine でメッセージキューを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java Websocket開発実践:メッセージキュー機能の実装方法 Java Websocket開発実践:メッセージキュー機能の実装方法 Dec 02, 2023 pm 01:57 PM

Java Websocket開発実践:メッセージキュー機能の実装方法

FastAPI での非同期タスク処理にメッセージ キューを使用する方法 FastAPI での非同期タスク処理にメッセージ キューを使用する方法 Jul 30, 2023 pm 09:21 PM

FastAPI での非同期タスク処理にメッセージ キューを使用する方法

Golang 開発: NATS を使用して信頼性の高いメッセージ キューを構築する Golang 開発: NATS を使用して信頼性の高いメッセージ キューを構築する Sep 21, 2023 am 11:21 AM

Golang 開発: NATS を使用して信頼性の高いメッセージ キューを構築する

Java で Linux スクリプト操作を使用してメッセージ キューを実装する方法 Java で Linux スクリプト操作を使用してメッセージ キューを実装する方法 Oct 05, 2023 am 08:09 AM

Java で Linux スクリプト操作を使用してメッセージ キューを実装する方法

C# 開発におけるメッセージ キューと非同期通信の問題に対処する方法 C# 開発におけるメッセージ キューと非同期通信の問題に対処する方法 Oct 08, 2023 am 08:41 AM

C# 開発におけるメッセージ キューと非同期通信の問題に対処する方法

C# 開発で分散トランザクションとメッセージ キューを扱う方法 C# 開発で分散トランザクションとメッセージ キューを扱う方法 Oct 09, 2023 am 11:36 AM

C# 開発で分散トランザクションとメッセージ キューを扱う方法

メッセージキューでの Redis の素晴らしい使い方 メッセージキューでの Redis の素晴らしい使い方 Nov 07, 2023 pm 04:26 PM

メッセージキューでの Redis の素晴らしい使い方

Kafka メッセージ キューの基礎となる実装メカニズムについての深い理解 Kafka メッセージ キューの基礎となる実装メカニズムについての深い理解 Feb 01, 2024 am 08:15 AM

Kafka メッセージ キューの基礎となる実装メカニズムについての深い理解

See all articles