加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang系列文章:接收命令行输入

发布时间:2020-12-16 09:34:00 所属栏目:大数据 来源:网络整理
导读:上次总结了收集命令行参数的几种方式,今天记录一下如何从命令行接收用户输入。 我们这里设计一个小需求,借助程序从命令行收集用户的逐行输入,以 bye 为结束信号,然后在输入结束后,统计每一行输入的内容和该内容出现的次数。 为了完成这个功能,我们首先

上次总结了收集命令行参数的几种方式,今天记录一下如何从命令行接收用户输入。

我们这里设计一个小需求,借助程序从命令行收集用户的逐行输入,以bye为结束信号,然后在输入结束后,统计每一行输入的内容和该内容出现的次数。

为了完成这个功能,我们首先需要创建一个map,来存放每一行输入的内容和对应出现的次数,在Go语言中,我们可以使用make(map[string]int)这种方式创建所需的数据结构。

如何从标准输入流中接收数据呢,Go提供了bufio.NewScanner(os.Stdin)这样的方式,它和Java中的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 : %sn",n,line)
    }
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读