当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Go-如何增加最大Stdin输入长度?》经验,为你挑选了1个好方法。

从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错误而停止扫描.



1> sberry..:

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

特别:

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

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

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有