我正在使用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
}
有什么办法可以增加换行符的长度吗?还是获得扫描程序停止使用的令牌的长度?
答案 0 :(得分:0)
这是一个答案,从字面意义上回答了我的问题,关于包含thaw
和潜在的\n
,但在读取IMAP服务器的响应时首先使用扫描仪不是正确的工具,我将重写对Scanner的使用并将其替换为bufio.Reader。
您可以指定在扫描程序中使用的自定义拆分功能,例如,您可以将ScanLines拆分功能移植到不使用返回的令牌删除换行符的功能。
\r
答案 1 :(得分:0)
提供给SplitFunc
的默认bufio.NewScanner
是SplitLines
,其中包括对dropCR
的调用,该注释根据注释在行{{1} }。由于\r?\n
将有选择地查找和放回车,因此无法使用Scanner
查找行的完整长度。
根据我的经验,在基本情况下通常使用扫描仪,因为这是一种方便的结构。否则,bufio.Reader会提供更大的灵活性。 bufio.Scanner
将为您提供所需的内容。