从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) }
一些建议的答案后更新......对不起的家伙 - 我仍然必须做错事,或者错误地提出问题.我尝试了两个建议,但仍然看到同样的问题.以下是代码的更新版本.症状是扫描仪在第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()) }
sberry.. 5
您忽略返回值的scanner.Scan()
这是一个bool
表明您是否走到了尽头.
特别:
扫描停止时返回false,或者到达输入结束或出错.在Scan返回false之后,Err方法将返回扫描期间发生的任何错误,除非它是io.EOF,Err将返回nil.
所以你需要继续scanner.Scan()
在循环中运行,直到它返回false,然后检查.Err()
以确保你没有因为非EOF错误而停止扫描.
您忽略返回值的scanner.Scan()
这是一个bool
表明您是否走到了尽头.
特别:
扫描停止时返回false,或者到达输入结束或出错.在Scan返回false之后,Err方法将返回扫描期间发生的任何错误,除非它是io.EOF,Err将返回nil.
所以你需要继续scanner.Scan()
在循环中运行,直到它返回false,然后检查.Err()
以确保你没有因为非EOF错误而停止扫描.