bufio.Scanner оборачивает io.Reader и предоставляет построчное чтение:
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}Scanner сам увеличивает буфер при длинных строках. Разделитель по умолчанию - \n, его можно изменить через scanner.Split.