golang终端循环输入

发布时间:2024-07-05 00:02:18

开发者对于终端循环输入是常见的需求之一。在golang中,我们可以利用for循环和标准库中的bufio包来实现这个功能。

1. 循环读取用户输入

首先,我们需要引入bufio包,并创建一个bufio.Scanner对象以便从标准输入流中读取数据。

接下来,我们可以使用for循环来不断地读取用户输入,直到用户退出程序。在每次循环中,我们可以通过scanner.Scan()方法来读取一行用户输入,并将其存储在一个变量中。

示例代码如下:

package main

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

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Print("请输入内容:")
        if scanner.Scan() {
            input := scanner.Text()
            fmt.Println("您输入了:", input)
        }
    }
}

2. 添加输入限制

有时候,我们需要对用户输入进行一些限制,比如只允许输入特定的字符或者长度限制等。

通过使用if语句和字符串操作函数,我们可以对用户输入进行判断和处理。

示例代码如下:

package main

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

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Print("请输入内容:")
        if scanner.Scan() {
            input := scanner.Text()
            if strings.Contains(input, "golang") {
                fmt.Println("您输入了:", input)
            } else {
                fmt.Println("输入无效,请重新输入!")
            }
        }
    }
}

3. 错误处理

在最后一段代码中,我们并没有对scan方法的错误进行处理。实际上,这是一个严重的错误,因为如果发生了输入读取错误,我们应该及时处理并终止程序运行。

为了正确处理错误,我们需要在scan方法调用之后立即检查错误,并采取相应的措施。在上面的示例代码中,我们可以使用if语句检查scanner.Err()方法的返回值,如果不为空,则说明出现了错误。

示例代码如下:

package main

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

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Print("请输入内容:")
        if scanner.Scan() {
            input := scanner.Text()
            if strings.Contains(input, "golang") {
                fmt.Println("您输入了:", input)
            } else {
                fmt.Println("输入无效,请重新输入!")
            }
        }
        if scanner.Err() != nil {
            fmt.Println("输入错误,程序终止!")
            break
        }
    }
}

相关推荐