Ответ 1
Ответ находится в документации Scanln
:
Scanln похож на Scan, но останавливает сканирование в новой строке, и после последнего элемента должна быть новая строка или EOF.
Scan
ведет себя как документально:
Сканирование сканирует текст, считанный со стандартного ввода, сохраняя последовательные значения, разделенные пробелами, в последовательные аргументы. Новые строки считаются пробелом. Он возвращает количество успешно проверенных элементов. Если это меньше, чем число аргументов, err сообщает о том, почему.
В заключение: Scan
помещает каждое слово (строку, разделенное пробелом) в соответствующий аргумент, рассматривая новые строки как пробелы. Scanln
делает то же самое, но обрабатывает символы новой строки как символ остановки, а затем не разбирается после этого.
Если вы хотите прочитать строку (\n
в конце), используйте bufio.Reader
и ее метод ReadString
:
line, err := buffer.ReadString('\n')