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教程。
