ZetCode

Go Scan

最后修改时间 2024 年 4 月 11 日

在本文中,我们将展示如何在 Golang 中使用 scan 函数读取标准输入。scan 函数位于 fmt 包中。

Scan 函数

有三个 scan 函数:scanscanlnscanf

func Scan(a ...any) (n int, err error)

scan 函数从标准输入读取文本,并将连续的空格分隔的值存储到给定的参数中。换行符也算作空格。这意味着我们可以在按下 Enter 键后继续输入参数。

func Scanln(a ...any) (n int, err error)

Scanln 函数与 Scan 类似,但它会在遇到换行符时停止扫描。在最后一个项目之后,必须有一个换行符或 EOF。

func Scanf(format string, a ...any) (n int, err error)

Scanf 函数根据格式字符串从标准输入读取数据,并将连续的空格分隔的值存储到给定的参数中。它返回成功扫描的项目数。该函数允许更复杂的扫描。

Go Scan

在第一个示例中,我们使用 Scan 函数。

main.go
package main

import (
    "fmt"
    "log"
)

func main() {

    var name string

    fmt.Print("Enter your name: ")

    _, err := fmt.Scan(&name)

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Hello %s!\n", name)
}

该示例从用户那里读取输入,构建一条消息并将其打印到控制台。

$ go run main.go
Enter your name: Peter
Hello Peter!

main.go
package main

import (
    "fmt"
    "log"
)

func main() {
    var name string
    var age int

    fmt.Print("Enter your name and age: ")

    n, err := fmt.Scan(&name, &age)

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("scanned %d arguments\n", n)
    fmt.Printf("%s is %d years old\n", name, age)
}

我们扫描了两个参数。我们打印了扫描的参数数量以及由这两个参数构建的消息。

$ go run main.go
Enter your name and age: Peter 23
scanned 2 arguments
Peter is 23 years old

Go Scanln

使用 Scanln 时,换行符会终止扫描过程。

main.go
package main

import (
    "fmt"
    "log"
)

func main() {

    var name1 string
    var name2 string
    var name3 string

    fmt.Print("Enter three names: ")

    _, err := fmt.Scanln(&name1, &name2, &name3)

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Entered names: %s, %s, %s\n", name1, name2, name3)
}

我们使用 Scanln 函数读取三个名字。

Go Scanf

Scanf 函数支持更高级的扫描。

main.go
package main

import (
    "fmt"
    "log"
)

func main() {

    var n1, n2, n3, n4, n5 int

    fmt.Print("Enter five numbers separated by comma and space: ")

    _, err := fmt.Scanf("%d, %d, %d, %d, %d", &n1, &n2, &n3, &n4, &n5)

    if err != nil {
        log.Fatal(err)
    }

    sum := n1 + n2 + n3 + n4 + n5

    fmt.Printf("The sum of five numbers is: %d\n", sum)
}

在此示例中,我们读取五个数字。这些数字必须由逗号和空格分隔。

$ go run main.go
Enter five numbers separated by comma and space: 1, 2, 3, 4, 5
The sum of five numbers is: 15

来源

Go fmt 包 - 参考

在本文中,我们学习了 Golang 中的 scan 函数。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Go 教程