Каким образом рекомендуется использовать более 1024 символов при чтении со стандартного ввода в Go?Go - Как увеличить максимальную длину входного сигнала Stdin?
Например, этот код с помощью bufio.Scanner
имеет максимальную длину входного 1024.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
input := scanner.Text()
fmt.Println(input)
}
Update после некоторых предложенных ответов ... К сожалению, ребят - я должен еще делать что-то неправильно, или искажен вопрос , Я попробовал оба предложения и по-прежнему вижу ту же проблему. Ниже приведена обновленная версия кода. Симптом заключается в том, что сканер не будет принимать ввод после 1024-го символа. например Попробуйте запустить это затем вставить в строку, которая давно 1025 символов, и это перестанет принимать входной сигнал после символа 1024.
package main
import (
"bufio"
"bytes"
"fmt"
"log"
"os"
)
func main() {
var buffer bytes.Buffer
scanner := bufio.NewScanner(os.Stdin)
for {
done := scanner.Scan()
buffer.WriteString(scanner.Text())
if done == true {
if scanner.Err() != nil {
log.Fatal("Error scanning input")
}
break
}
}
fmt.Println(buffer.String())
}
[максимальный размер маркера сканера] (https://golang.org/pkg/bufio/#pkg-constants) - 64k. Существует [пример использования сканера в документах] (https://golang.org/pkg/bufio/#example_Scanner_lines) – JimB
Вы не можете проверить это, вставив текст в терминал. В готовом режиме tty имеет жесткий кодированный входной буфер в ядре, обычно 4096 на Linux и 1024 на Darwin. – JimB
Argh - спасибо JimB. Я не знал об этом, и это меня подтолкнуло. Это было запутанно, потому что мой терминал (iTerm on Darwin) допускает более 1024 символов, когда он не работает как часть команды. –