上次我们介绍了收集命令行参数的几种方式,感觉还是不过瘾,今天再来介绍一下如何从命令行接收用户输入。

bye
mapmake(map[string]int)
bufio.NewScanner(os.Stdin)new Scanner(System.in)

实现过程比较简单,我们来瞄一眼吧:

// scan.go

package main

import (
"os"
"fmt"
"bufio"
) func main() {
// 创建一个map 指定key为string类型 val为int类型
counts := make(map[string]int)
// 从标准输入流中接收输入数据
input := bufio.NewScanner(os.Stdin) fmt.Printf("Please type in something:\n") // 逐行扫描
for input.Scan() {
line := input.Text() // 输入bye时 结束
if line == "bye" {
break
} // 更新key对应的val 新key对应的val是默认0值
counts[line]++
} // 遍历map统计数据
for line, n := range counts {
fmt.Printf("%d : %s\n", n, line)
}
}

最后,我们运行程序,来看看结果:

$ go run scan.go
Please type in something:
hello
world
hello
bye
# 输出统计结果
2 : hello
1 : world

可以看出,上面代码统计出了我们每一行输入出现的次数,是不是很简单呢。