为了账号安全,请及时绑定邮箱和手机立即绑定

golang - bufio 读取多行直到 (CRLF) \r\n 分隔符

golang - bufio 读取多行直到 (CRLF) \r\n 分隔符

Go
拉风的咖菲猫 2022-01-17 10:07:18
我正在尝试实现我自己的 beanstalkd 客户端作为一种学习方式。https://github.com/kr/beanstalkd/blob/master/doc/protocol.txt目前,我正在bufio读取由 . 分隔的一行数据\n。res, err := this.reader.ReadLine('\n')当我发送单个命令并读取单行响应时,这很好:INSERTED %d\r\n但是当我尝试保留作业时发现困难,因为作业正文可能是多行,因此,我不能使用\n分隔符。有没有办法读入缓冲区直到CRLF?例如,当我发送reserve命令时。我的预期反应如下:RESERVED <id> <bytes>\r\n<data>\r\n但数据可能包含\n,所以我需要阅读直到\r\n.<bytes>或者 - 有没有一种方法可以读取上面示例响应中指定的特定字节数?目前,我已经(删除了错误处理):func (this *Bean) receiveLine() (string, error) {    res, err := this.reader.ReadString('\n')    return res, err}func (this *Bean) receiveBody(numBytesToRead int) ([]byte, error) {    res, err := this.reader.ReadString('\r\n') // What to do here to read to CRLF / up to number of expected bytes?    return res, err}func (this *Bean) Reserve() (*Job, error) {    this.send("reserve\r\n")    res, err := this.receiveLine()    var jobId uint64    var bodylen int    _, err = fmt.Sscanf(res, "RESERVED %d %d\r\n", &jobId, &bodylen)    body, err := this.receiveBody(bodylen)    job := new(Job)    job.Id = jobId    job.Body = body    return job, nil}
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 483 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信