• Golang: 接收命令行输入


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

    我们这里设计一个小需求,借助程序从命令行收集用户的逐行输入,以 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:
    ")
    
        // 逐行扫描
        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, line)
        }
    }
    

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

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

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

  • 相关阅读:
    url protocol
    wpf webbrowser取消js报错
    c#端口扫描器wpf+socket
    c#协变 抗变
    MTK刷机快捷键
    iTextCharp c#
    wince可用的7-zip
    直播平台搭建与相关资料
    pyinstall
    面向对象常见的术语
  • 原文地址:https://www.cnblogs.com/liuhe688/p/10897699.html
Copyright © 2020-2023  润新知