How golang functions use pipes to communicate

WBOY
Release: 2024-04-30 17:39:01
Original
806 people have browsed it

In Go, a pipe is a FIFO queue used for communication between goroutines. Create a pipeline: use the make(chan T) function, where T is the data type in the pipeline. Sending data: Use the ch

How golang functions use pipes to communicate

Use pipes for function communication in Go

In Go, pipes are a lightweight communication mechanism. Allows goroutines (Go coroutines) to exchange data safely and efficiently. A pipe is essentially a FIFO (first in, first out) queue through which goroutines can send and receive data.

Create pipeline

The pipeline is created using the make(chan T) function, where T is the data carried in the pipeline type. The following example creates a channel that contains data of type string:

ch := make(chan string)
Copy after login

Send data

To send data to the pipe, use ch &lt ;- data syntax, where ch is the pipe to send the data to and data is the value to send.

ch <- "Hello, World!"
Copy after login

Receive data

To receive data from a pipe, use the <-ch syntax, where ch is The pipe to receive data from.

message := <-ch
Copy after login

Practical case: Concurrent file reading

Let us create a file reading program that uses pipe concurrency. The program will read data from multiple files and send it to a pipe, and another goroutine will receive the data from the pipe and print it to the console.

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)
    }
}
Copy after login

In this example, we create a pipe ch that will hold the lines read from the file. Three goroutines concurrently read data from different files and send it to the pipe. Another goroutine receives data from the pipe and prints it to the console.

The above is the detailed content of How golang functions use pipes to communicate. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!