Go 言語プログラミングにおけるバッファ付きチャネル

GolangGolangBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Go言語におけるバッファ付きチャネルの理解度をテストすることを目的としています。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ConcurrencyGroup(["Concurrency"]) go/ConcurrencyGroup -.-> go/channels("Channels") subgraph Lab Skills go/channels -.-> lab-15456{{"Go 言語プログラミングにおけるバッファ付きチャネル"}} end

チャネルのバッファリング

デフォルトでは、Go言語のチャネルはバッファ無しで、つまり、送信された値を受け取るための対応する受信が準備できている場合にのみ、送信 (chan <-) を受け付けます。一方、バッファ付きチャネルは、それらの値に対応する受信者がいなくても、制限された数の値を受け付けます。この実験では、バッファ付きチャネルを作成し、対応する同時受信なしでチャネルに値を送信するよう求められます。

  • Go言語のチャネルの基本知識
  • バッファ付きチャネルの理解
$ go run channel-buffering.go
buffered
channel

以下が完全なコードです:

// デフォルトでは、チャネルは _バッファ無し_ で、つまり、
// 送信された値を受け取るための対応する受信 (`<- chan`) が準備できている場合にのみ、
// 送信 (`chan <-`) を受け付けます。 _バッファ付きチャネル_ は、
// それらの値に対応する受信者がいなくても、制限された数の値を受け付けます。

package main

import "fmt"

func main() {

	// ここでは、最大2つの値をバッファリングする文字列のチャネルを `make` します。
	messages := make(chan string, 2)

	// このチャネルはバッファ付きなので、対応する同時受信なしでこれらの値をチャネルに送信できます。
	messages <- "buffered"
	messages <- "channel"

	// 後で、いつも通りこれら2つの値を受信できます。
	fmt.Println(<-messages)
	fmt.Println(<-messages)
}

まとめ

この実験では、Go言語でバッファ付きチャネルを作成し、対応する同時受信なしでチャネルに値を送信する方法を学びました。これは、送信者をブロックすることなくチャネルに値を送信したいシチュエーションで役立ちます。