登录
首页 >  Golang >  Go问答

突破 input.Scan()

来源:Golang技术栈

时间:2023-03-23 07:46:10 347浏览 收藏

大家好,今天本人给大家带来文章《突破 input.Scan()》,文中内容主要涉及到golang,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我有这个简单的代码来从控制台读取所有输入:

input := bufio.NewScanner(os.Stdin) //Creating a Scanner that will read the input from the console

for input.Scan() {
    if input.Text() == "end" { break } //Break out of input loop when the user types the word "end"
    fmt.Println(input.Text())
}

代码原样有效。我想要做的是摆脱 if 子句。根据我对文档的理解,如果一行为空input.Scan(),则应返回 false 并因此跳出循环。

Scan 将 Scanner 推进到下一个令牌,然后可以通过 Bytes 或 Text 方法获得该令牌。当扫描停止时,它返回 false,无论是到达输入的末尾还是错误。Scan 返回 false 后,Err 方法将返回扫描过程中发生的任何错误,除非是 ,否则io.EOFErr 将返回 nil。如果 split 函数在没有推进输入的情况下返回 100 个空标记,则扫描恐慌。这是扫描仪的常见错误模式。

我是否误解了文档,并且实际上有必要使用这样的 if 子句来爆发?(我正在使用 Go 1.5.2 使用“go run”运行程序。)

正确答案

我认为您误读了文档。默认扫描仪是 ScanLines 功能。

文档说:

ScanLines 是 Scanner 的一个拆分函数,它返回每一行文本,去掉任何尾随的行尾标记。返回的行可能为空。行尾标记是一个可选的回车符,后跟一个强制性的换行符。在正则表达式表示法中,它是\r?\n. 即使没有换行符,也将返回最后一个非空输入行。

这里有两个重点:

  • 返回行可能为空 :这意味着它返回空行。
  • 即使没有换行符,也会返回最后一个非空输入行 :这意味着如果文件的最后一行非空,则始终返回它。然而,这并不意味着空行结束流。

扫描仪将在 EOF(文件结束)处停止。例如,键入 Ctrl-D 将发送文件结尾并停止扫描仪。

今天关于《突破 input.Scan()》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表