在 golang 中,io.PipeReader 是一个常用的读取器,但它的 Read() 方法在没有数据可读时会阻塞程序的执行。那么如何实现对 io.PipeReader 进行非阻塞
在 golang 中,io.PipeReader 是一个常用的读取器,但它的 Read() 方法在没有数据可读时会阻塞程序的执行。那么如何实现对 io.PipeReader 进行非阻塞的读取呢?PHP小编小新为您提供了一种解决方案,通过使用 select 和 Goroutine 的方式,我们可以实现对 io.PipeReader 的非阻塞读取,从而提高程序的响应性和并发性。下面将详细介绍如何实现这一功能,并给出示例代码。
我有以下代码。 5 秒后,可执行程序将向 stdout 发送一些文本。因此,in.readline() 将阻塞直到接收到数据。如何为 readline() 设置超时或以非阻塞方式执行?
package main
import (
"bufio"
"fmt"
"io"
"os/exec"
)
func main() {
cmd := exec.Command("/path/to/executable")
stdoutReader, stdoutWriter := io.Pipe()
cmd.Stdout = stdoutWriter
cmd.Start()
in := bufio.NewReader(stdoutReader)
b, _, _ := in.ReadLine()
fmt.Println(string(b))
}
感谢您的评论。我明白了。
package main
import (
"bufio"
"fmt"
"io"
"os/exec"
"time"
)
func main() {
ch := make(chan []byte)
cmd := exec.Command("/path/to/executable")
stdoutReader, stdoutWriter := io.Pipe()
cmd.Stdout = stdoutWriter
if err := cmd.Start(); err != nil {
return
}
in := bufio.NewReader(stdoutReader)
go func() {
b, _, _ := in.ReadLine()
ch <- b
}()
complete := false
for !complete {
select {
case s := <-ch:
fmt.Println(string(s))
complete = true
case <-time.After(time.Second * 5):
fmt.Println("timeout")
complete = true
}
}
}
以上就是如何在 Golang 中对 io.PipeRaeder 进行非阻塞 Read()的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 如何在 Golang 中对 io.PipeRaeder 进行非阻塞 Read()
本文链接: https://www.lsjlt.com/news/563036.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0