登录
首页 >  Golang >  Go问答

缓冲区末尾和超时限制

来源:stackoverflow

时间:2024-03-02 08:21:19 133浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《缓冲区末尾和超时限制》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我有一个方法,我想读取缓冲区直到它到达提示符。当输出中出现提示时它工作正常,但我不知道如何判断何时到达缓冲区末尾。

此外,我想添加超时,以防设备没有响应。

func (device *Device) readUntil(pattern string) (*string, error) {
stdoutBuf := make([]byte, 65*1024)
output := ""
var validID = regexp.MustCompile(pattern)

for {
    byteCount, err := device.reader.Read(stdoutBuf)
    if err != nil {
        log.Println("Reader read err:%s", err.Error())
        break
    }
    output += string(stdoutBuf[:byteCount])
    //fmt.Println(byteCount, err, io.EOF)

    if validID.MatchString(string(stdoutBuf[:byteCount])) {
        return &output, nil
    }

}

return &output, nil
}

解决方案


您可以在选择循环中使用代码来中断循环

func (device *Device) readUntil(pattern string) (*string, error) {
    stdoutBuf := make([]byte, 65*1024)
    output := ""
    var validID = regexp.MustCompile(pattern)

    timeout := time.After(1 * time.Second)

    for {

        select {

        case <-timeout:
            return nil, errors.New("error timeout")

        default:
            byteCount, err := device.reader.Read(stdoutBuf)
            if err != nil {
                log.Println("Reader read err:%s", err.Error())
                break
            }
            output += string(stdoutBuf[:byteCount])
            //fmt.Println(byteCount, err, io.EOF)

            if validID.MatchString(string(stdoutBuf[:byteCount])) {
                return &output, nil
            }
        }

    }

    return &output, nil
}

今天关于《缓冲区末尾和超时限制》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>