gpt4 book ai didi

go - 突破 input.Scan()

转载 作者:IT老高 更新时间:2023-10-28 13:05:05 35 4
gpt4 key购买 nike

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

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 advances the Scanner to the next token, which will then be available through the Bytes or Text method. 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. Scan panics if the split function returns 100 empty tokens without advancing the input. This is a common error mode for scanners.

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

最佳答案

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

文档说:

ScanLines is a split function for a Scanner that returns each line of text, stripped of any trailing end-of-line marker. The returned line may be empty. The end-of-line marker is one optional carriage return followed by one mandatory newline. In regular expression notation, it is \r?\n. The last non-empty line of input will be returned even if it has no newline.

这里有两个重点:

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

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

关于go - 突破 input.Scan(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481065/

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