使用扫描仪时如何获取包括换行符在内的行长?

时间:2018-11-12 15:07:40

标签: go

我正在使用Scan一次从IMAP连接中扫描第1行,这些行以\r\n结尾,但是我怀疑我得到的某些行实际上已经结束了仅\n中,因为在特定实例中解析主体原子时,我得到的数据量不正确

({* 8620 FETCH (BODY[] {7060}是我在一封电子邮件中获得的内容,但似乎比将换行符计算为2个字节要长)

// ...
r := bufio.NewScanner(d.conn)
for r.Scan() {
    line := r.Text()
    len(line) // gets the line length WITHOUT the newline
}

有什么办法可以增加换行符的长度吗?还是获得扫描程序停止使用的令牌的长度?

2 个答案:

答案 0 :(得分:0)

这是一个答案,从字面意义上回答了我的问题,关于包含thaw和潜在的\n,但在读取IMAP服务器的响应时首先使用扫描仪不是正确的工具,我将重写对Scanner的使用并将其替换为bufio.Reader。


您可以指定在扫描程序中使用的自定义拆分功能,例如,您可以将ScanLines拆分功能移植到不使用返回的令牌删除换行符的功能。

\r

答案 1 :(得分:0)

提供给SplitFunc的默认bufio.NewScannerSplitLines,其中包括对dropCR的调用,该注释根据注释在行{{1} }。由于\r?\n将有选择地查找和放回车,因此无法使用Scanner查找行的完整长度。

根据我的经验,在基本情况下通常使用扫描仪,因为这是一种方便的结构。否则,bufio.Reader会提供更大的灵活性。 bufio.Scanner将为您提供所需的内容。