Go では、パイプはゴルーチン間の通信に使用される FIFO キューです。パイプラインを作成します。make(chan T) 関数を使用します。ここで、T はパイプラインのデータ型です。データの送信: ch
Go での関数通信にパイプを使用する
Go では、パイプはゴルーチン (Go コルーチン) を可能にする軽量の通信メカニズムです。データを安全かつ効率的に交換します。パイプは本質的には、ゴルーチンがデータを送受信できる FIFO (先入れ先出し) キューです。
パイプラインの作成
パイプラインは、make(chan T)
関数を使用して作成されます。T
はデータです。パイプライン方式で搬送されます。次の例では、文字列型のデータを含むチャネルを作成します。
ch := make(chan string)
Send data
データをパイプに送信するには、ch < ;- data を使用します。
構文。 ch
はデータの送信先のパイプ、data
は送信する値です。
ch <- "Hello, World!"
データの受信
パイプからデータを受信するには、 構文を使用します。ここで、<code>ch
データを受信するパイプです。
message := <-ch
実際のケース: 同時ファイル読み取り
パイプ同時実行を使用するファイル読み取りプログラムを作成してみましょう。プログラムは複数のファイルからデータを読み取ってパイプに送信し、別のゴルーチンがパイプからデータを受信してコンソールに出力します。
package main import ( "bufio" "fmt" "io/ioutil" "log" "os" ) func readFile(filePath string, ch chan string) { file, err := os.Open(filePath) if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { ch <- scanner.Text() } } func main() { ch := make(chan string) // 从多个文件中读取数据 files := []string{"file1.txt", "file2.txt", "file3.txt"} for _, file := range files { go readFile(file, ch) } // 从管道接收并打印数据 for { message := <-ch if message == "" { break } fmt.Println(message) } }
この例では、ファイルから読み取った行を保持するパイプ ch
を作成します。 3 つのゴルーチンは、異なるファイルからデータを同時に読み取り、パイプに送信します。別の goroutine はパイプからデータを受信し、それをコンソールに出力します。
以上がgolang 関数がパイプを使用して通信する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。