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

Beginner

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

はじめに

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

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

デフォルトでは、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 言語でバッファ付きチャネルを作成し、対応する同時受信なしでチャネルに値を送信する方法を学びました。これは、送信者をブロックすることなくチャネルに値を送信したいシチュエーションで役立ちます。