gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:24:40 27 4
gpt4 key购买 nike

在 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())
}

最佳答案

您忽略了 scanner.Scan() 的返回值,它是一个 bool 指示您是否已到达终点。

具体来说:

It returns false when the scan stops, either by reaching the end of the input or an error. After Scan returns false, the Err method will return any error that occurred during scanning, except that if it was io.EOF, Err will return nil.

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

关于Go - 如何增加最大 Stdin 输入长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com