GO随笔(ch1\dup1)

        摸鱼时候看的go圣经,权当做个笔记

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	counts := make(map[string]int)
	input := bufio.NewScanner(os.Stdin)
	for input.Scan() {
		counts[input.Text()]++
	}
	// NOTE: ignoring potential errors from input.Err()
	for line, n := range counts {
		if n > 1 {
			fmt.Printf("%d\t%s\n", n, line)
		}
	}
}

主要功能:记录从键盘输入的行,记录有多少重复的行并且按照"重复次数:行内容"输出。注:不重复的行是不会被输出的

终端运行情况:先进入dup1文件夹,生成main的exe:go build main.go

                         再运行main.exe:./main

                         最后输入你所需要的行数据,Windows使用ctrl+c结束

 main函数的逐行注解:

counts := make(map[string]int):首先解释make函数,在Go语言中,make函数用于创建一些内置类型的数据结构。make函数接受两个参数:类型和容量(可选)。在这个例子中,我们只传递了类型map[string]int,表示创建一个键为字符串、值为整数的映射。通过这个语句,我们创建了一个空的映射counts。,其中键(key)的类型是字符串(string),值(value)的类型是整数(int)。用于存储每个文本行的出现次数。在后续的代码中,我们会使用counts映射来记录每个文本行的出现次数,并进行统计和打印。其中让笔者比较关注的是等号之前的冒号:在GO语言中,通常使用  ”:=“这个符号是一种短变量声明的方式。它用于同时声明和初始化一个变量。其实原本是需要分两步走的:声明变量(var counts map[string]int)和初始化变量(counts = make(map[string]int))使用短变量声明可以在一行代码中完成声明和初始化的操作。需要注意的是,短变量声明的方式只能用于函数内部,用于声明局部变量。在函数外部,我们需要使用var关键字来声明变量。

input := bufio.NewScanner(os.Stdin):bufio是代码开始导入的一个包,NewScanner是这个包内包含的一个函数,用于创建一个新的Scanner对象,它可以从指定的输入源中读取数据。os.Stdin作为输入源,它表示标准输入(通常是终端或命令行)。综上:通过这个语句,我们创建了一个名为input的变量,并将其初始化为一个能够从标准输入读取数据的Scanner对象。在后续的代码中,我们可以使用input变量来读取用户输入的文本行。

for input.Scan() {

        counts[input.Text()]++

    }:前文未提到input.Text()和input.Scan(),这两个其实是前文定义的input的两个方法,GO语言中方法的定义和python中类的方法定义很相似。方法是与特定类型或对象相关联的函数,可以访问关联对象的属性和方法。函数是独立的,不与特定类型或对象相关联。input.Scan()的功能是读取输入的下一行文本。并返回true表示成功读取到文本,或返回false表示输入结束或发生错误。直到主动结束(ctrl+c),input.Text()会返回当前读取到的文本行,并将其作为counts映射的键。然后,通过counts[input.Text()]++将该文本行在counts映射中对应的值加1。所以,input.Text()返回的文本行可以作为counts映射的键,用于统计每个文本行的出现次数。

for line, n := range counts {

        if n > 1 {

            fmt.Printf("%d\t%s\n", n, line)

        }

    }:这段代码的意思是遍历一个名为counts的集合,其中每个元素包含一个行(line)和一个计数(n)。如果计数(n)大于1,则使用格式化字符串将计数(n)和行(line)打印出来,格式为"计数(n)\t行(line)"。其中"\t"表示制表符,用于在计数和行之间添加一个水平制表符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值