golang select 实现异步 IO 操作
时间: 2024-05-06 11:18:39 浏览: 148
Python通过select实现异步IO的方法
在 Golang 中,可以使用 `select` 语句来实现异步 IO 操作。`select` 语句可以监听多个通道的数据流动,并在其中任意一个通道有数据可读或可写时执行对应的操作。
下面是一个简单的例子,使用 `select` 实现异步读取和写入文件:
```go
func main() {
input := make(chan []byte)
output := make(chan []byte)
// 异步读取文件
go func() {
file, err := os.Open("input.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
log.Fatal(err)
}
input <- data
}()
// 异步写入文件
go func() {
file, err := os.Create("output.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
data := <-output
_, err = file.Write(data)
if err != nil {
log.Fatal(err)
}
}()
// select 监听通道
select {
case data := <-input:
output <- data
}
}
```
在这个例子中,我们先创建了两个通道 `input` 和 `output`,分别用于异步读取和写入文件。然后使用两个 goroutine 分别读取和写入文件,并将数据通过通道传递。最后使用 `select` 监听 `input` 通道,当有数据可读时,将数据写入 `output` 通道,触发写入文件的 goroutine 执行。
阅读全文