Go - 如何增加最大Stdin输入长度?

Dan*_*ner 2 go

从Go中的标准输入读取时,建议允许超过1024个字符的方法是什么?

例如,此代码使用bufio.Scanner的最大输入长度为1024.

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    input := scanner.Text()
    fmt.Println(input)
}
Run Code Online (Sandbox Code Playgroud)

一些建议的答案后更新......对不起的家伙 - 我仍然必须做错事,或者错误地提出问题.我尝试了两个建议,但仍然看到同样的问题.以下是代码的更新版本.症状是扫描仪在第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())
}
Run Code Online (Sandbox Code Playgroud)

sbe*_*rry 5

您忽略返回值的scanner.Scan()这是一个bool表明您是否走到了尽头.

特别:

扫描停止时返回false,或者到达输入结束或出错.在Scan返回false之后,Err方法将返回扫描期间发生的任何错误,除非它是io.EOF,Err将返回nil.

所以你需要继续scanner.Scan()在循环中运行,直到它返回false,然后检查.Err()以确保你没有因为非EOF错误而停止扫描.