开放的编程资料库

当前位置:我爱分享网 > Go教程 > 正文

Go读取用户输入

Goreadinput教程展示了如何读取用户的输入。标准输入,通常缩写为stdin,是程序从中读取其输入数据的流。

为了在Go中读取用户的输入,我们使用fmtbufioos包。

$ go version
go version go1.18.1 linux/amd64

我们使用Go版本1.18。

使用Scanf读取输入

Scanf函数扫描从标准输入读取的文本,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功扫描的项目数。

package main

import "fmt"

func main() {

    var name string

    fmt.Print("Enter your name: ")
    fmt.Scanf("%s", &name)
    fmt.Println("Hello", name)
}

该示例提示用户输入他的姓名。

var name string

我们定义一个字符串变量。

fmt.Scanf("%s", &name)

输入的值存储在name变量中。

$ go run read_input.go 
Enter your name: Peter
Hello Peter

我们运行程序并输入名称。

在下一个示例中,我们读取两个值。

package main

import "fmt"

func main() {

    var name string
    var age int

    fmt.Print("Enter your name & age: ")
    fmt.Scanf("%s %d", &name, &age)
    fmt.Printf("%s is %d years old\n", name, age)
}

程序从用户那里读取姓名和年龄。

fmt.Scanf("%s %d", &name, &age)

Scanf函数读取一个字符串和一个整数到提供的两个变量。

$ go run read_input2.go 
Enter your name & age: Peter 34
Peter is 34 years old

使用NewReader读取输入

bufio包实现缓冲I/O。缓冲I/O比非缓冲I/O具有更好的性能。该包包装了一个io.Readerio.Writer对象,创建了另一个对象(Reader或Writer),该对象也实现了该接口但提供缓冲和一些文本I/O帮助.

package main

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

func main() {

     reader := bufio.NewReader(os.Stdin)

     fmt.Print("Enter your name: ")

     name, _ := reader.ReadString('\n')
     fmt.Printf("Hello %s\n", name)
}

程序使用bufio.NewReader从输入中读取名称。

reader := bufio.NewReader(os.Stdin)

我们将标准输入传递给bufio.NewReader

name, _ := reader.ReadString('\n')

ReadString一直读取到输入中第一次出现指定的分隔符(在我们的例子中是换行符),返回一个包含数据的字符串,直到并包括分隔符。

使用NewScanner读取输入

Scanner提供了一个方便的接口来读取数据,例如以换行符分隔的文本行文件。

package main

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

func main() {

    names := make([]string, 0)

    scanner := bufio.NewScanner(os.Stdin)
    
    for {
        fmt.Print("Enter name: ")
        
        scanner.Scan()
        
        text := scanner.Text()

        if len(text) != 0 {

            fmt.Println(text)
            names = append(names, text)
        } else {
            break
        }
    }

    fmt.Println(names)
}

该示例允许从用户读取多个名称。按没有值的enter键结束程序。

names := make([]string, 0)

我们创建一个空切片。

scanner := bufio.NewScanner(os.Stdin)

根据标准输入创建了一个新的扫描仪。

for {
     fmt.Print("Enter name: ")
...

在for循环中,我们反复询问用户姓名。

scanner.Scan()

我们从标准输入中读取一行。Scan将Scanner推进到下一个令牌,然后可通过BytesText函数获取。

text := scanner.Text()

Text返回通过调用Scan生成的最新令牌,作为一个新分配的字符串保存其字节。

if len(text) != 0 {

     fmt.Println(text)
     names = append(names, text)
} else {
     break
}

如果文本不为空,我们打印它并将其附加到切片。

fmt.Println(names)

最后,我们打印所有扫描的名字。

$ go run read_input3.go 
Enter name: Lucia
Lucia
Enter name: Peter
Peter
Enter name: Roman     
Roman
Enter name: Jane
Jane
Enter name: [Lucia Peter Roman Jane]

在本教程中,我们介绍了在Golang中读取用户输入的方法。

列出所有Go教程。

未经允许不得转载:我爱分享网 » Go读取用户输入

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏