Хотя этот ответ отвечает на мой вопрос в буквальном смысле о включении \n
и потенциального \r
, использование сканера в первую очередь при чтении ответов сервера IMAP НЕ является правильным инструментом, и я буду переписать мое использование сканера и заменить его на bufio.Reader.
Вы можете указать пользовательские функции разделения для использования в Сканере, например, вы можете перенести функцию разделения ScanLines на функцию, которая не сбрасывает символы новой строки с возвращаемым токеном.
// ...
r := bufio.NewScanner(d.conn)
r.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) {
if atEOF && len(data) == 0 {
return 0, nil, nil
}
if i := bytes.IndexByte(data, '\n'); i >= 0 {
// We have a full newline-terminated line.
return i + 1, data[0 : i+1], nil
}
// If we're at EOF, we have a final, non-terminated line. Return it.
if atEOF {
return len(data), data, nil
}
// Request more data.
return 0, nil, nil
})
for r.Scan() {
line := r.Text()
len(line) // now gets the line length WITH the newline
}