Golang开发体验:非常棒且高效的方法分享

Golang开发体验:非常棒且高效的方法分享

for {
		fmt.Fprintf(out, PROMPT)
		scanned := scanner.Scan()
		if !scanned{
			return

怎么做到的?它是如何停止工作的?

2 回复

你能澄清一下“停止工作”是什么意思吗?

你是指上面的代码停止工作了吗?如果是这样,那么我们需要一个更完整的示例来查看可能的原因。

还是你是指什么导致循环停止?如果是这样,是 return 语句,它意味着停止执行当前函数并返回到调用者。

更多关于Golang开发体验:非常棒且高效的方法分享的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个典型的无限循环读取用户输入的模式。让我解释一下这段代码的工作原理:

for {
    fmt.Fprintf(out, PROMPT)  // 显示提示符
    scanned := scanner.Scan()  // 等待用户输入
    if !scanned {             // 如果扫描失败(如遇到EOF或错误)
        return                // 退出函数
    }
    // 这里通常会处理扫描到的内容
    // text := scanner.Text()
}

工作原理:

  1. for {} 创建一个无限循环
  2. scanner.Scan() 会阻塞等待用户输入
  3. 当输入流结束时(如用户按Ctrl+D或文件结束),Scan()返回false
  4. if !scanned 条件成立,执行return退出循环和函数

停止工作的几种情况:

  • 用户输入EOF(Unix/Linux: Ctrl+D, Windows: Ctrl+Z)
  • 输入流被关闭
  • 发生读取错误

完整示例:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    
    for {
        fmt.Print("> ")
        scanned := scanner.Scan()
        if !scanned {
            fmt.Println("输入结束")
            return
        }
        
        text := scanner.Text()
        fmt.Printf("你输入了: %s\n", text)
    }
}

当用户输入EOF时,程序会输出"输入结束"并退出。

回到顶部