Go扫描教程展示了如何使用扫描函数在Golang中读取标准输入。扫描函数位于fmt包中。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
扫描功能
共有三个扫描函数:scan
、scanln
、scanf
。
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
函数从标准输入读取并将连续的空格分隔值存储到给定的参数中,由字符串格式确定。它返回成功扫描的项目数。该功能允许更复杂的扫描。
去扫描
在第一个例子中,我们使用了Scan
函数。
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!
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
去扫描
使用Scanln
,换行符终止扫描过程。
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
函数来读取三个名字。
去扫描
Scanf
函数支持更高级的扫描。
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
在本教程中,我们使用了Golang中的扫描函数。
列出所有Go教程。