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

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

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

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

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

Golang: 接收命令行输入的更多相关文章

  1. C#_WinForm接收命令行参数

    C#_WinForm接收命令行参数 2014-08-03 10:17 534人阅读 评论(0) 收藏 举报 首先,我要仔细的声明下,本文讲的是接受命令行参数,让程序启动.而不是启动那个黑黑的框...我 ...

  2. 自定义实现InputFormat、OutputFormat、输出到多个文件目录中去、hadoop1.x api写单词计数的例子、运行时接收命令行参数,代码例子

    一:自定义实现InputFormat *数据源来自于内存 *1.InputFormat是用于处理各种数据源的,下面是实现InputFormat,数据源是来自于内存. *1.1 在程序的job.setI ...

  3. (转)C#_WinForm接收命令行参数

    本文转载自:http://blog.csdn.net/lysc_forever/article/details/38356007 首先,我要仔细的声明下,本文讲的是接受命令行参数,让程序启动.而不是启 ...

  4. Spring Boot程序接收命令行参数

    Spring Boot程序接收命令行参数 输入一行,回车,触发一次.如果想要调用service层,也是可以,能调用service层,就可以做很多事,触发一次就好比调用了一次http接口一样 packa ...

  5. Java命令行输入求和的简单学习

    思想:命令行输入的参数,必须先转换为数字才能进行加法计算,这就需要引用java.util.Scanner; 流程框图: 源代码: //实现几个整数相加的程序 //高开拓,2015.9.26 packa ...

  6. PyCharm命令行输入

    PyCharm命令行输入 写作原因 网上资料比较杂,版本较老,与现在的版本有区别,所以根据网上资料和自己亲手实验撰写此文. 设置方法 在菜单中按此路径设置: Run->Edit Configur ...

  7. Linux 命令行输入

    这几天刚刚接触到Linux,在windows上安装的VMWare虚拟机,Centos7.安装什么都是贾爷和办公室的同事帮忙搞定的. 在虚拟机界面,按快捷键Ctrl+Alt+Enter,可以全屏显示Li ...

  8. Golang: Cobra命令行参数库的使用

    将cobra下载到 $GOPATH,用命令: go get -v github.com/spf13/cobra/cobra 然后使用 go install github.com/spf13/cobra ...

  9. 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.

    [现象] 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment h ...

随机推荐

  1. NOIP2019翻车前计划以及日记

    目前只有日记和草拟计划(Sua机洗点~),等停课后会实施计划,试行期为一天. 根据试行期的学习效果制定计划. update 1:试行期结束,完全可以按计划来. update 2:计划暂时变更,以适应我 ...

  2. spark中的多目录输出及压缩

    最近接到一个需求,需要对spark的结果分目录输出,百度之后找到了解决方案,大多都是spark 按照key分目录输出, 但是在文件当中,会把key也输出出来,在这里以key作为目录是想建hive表时把 ...

  3. TreeMap源码分析2

    package map; import org.junit.Test; import com.mysql.cj.api.x.Collection; import map.TreeMap1.Ascend ...

  4. 【转帖】 PM RD QA OP

    From 百度知道 一.PM: Product Manager,产品经理,又称品牌经理(Brand Manager).举凡产品从创意到上市,所有相关的研发.调研.生产.编预算.广告.促销活动等等,都由 ...

  5. nginx php上传大小设置

    来源:http://blog.51yip.com/apachenginx/1751.html

  6. 11. Scala数据结构(下)-集合操作

    11.1 集合元素的映射-map映射操作 11.1.1 看一个实际需求 要求:请将List(3,5,8)中所有的元素都*2,将其结果放到一个新的集合中返回,即返回一个新的List(6,10,16),请 ...

  7. git在使用push指令的时候产生的错误

    一.问题我们在使用git指令的时候往往会出现如下错误. $ git push -u origin master To https://github.com/pzq7025/ss-fly.git ! [ ...

  8. 『正睿OI 2019SC Day2』

    分治 普通分治 普通分治是指针对序列或平面问题的分治算法. 思想 普通分治的思想是指将一个序列问题或平面问题通过某种划分方式划分为若干个子问题,直到子问题规模足够小,可以直接回答,再通过合并得到原问题 ...

  9. Java学习:可变参数

    可变参数 可变参数:是JDK1.5 之后出现的新特性 使用前提: 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数. 使用格式:定义方法时使用 修饰符 返回值类型 方法名(数 ...

  10. 卸载webpack,降低版本

    卸载:npm uninstall webpack -g 重新安装:npm install webpack@3.7.1 -g