Go语言圣经 - 第1章 入门 - 1.3 & 1.4 查找重复的行 & GIF

本文是Go语言入门章节,深入讲解了如何查找文件中的重复行,涉及bufio.Scanner和map的使用,以及Go语言基础如接口和方法。此外,文章还提及了处理GIF动画的相关知识,为后续学习奠定基础。
摘要由CSDN通过智能技术生成

第1章 入门

1.3 查找重复的行

在1.2节,我们简单的了解了一些Go语言的基本语法,接下来我们再来看一个例子进一步学习

对文件做拷贝、打印、搜索和排序、统计或类似事情的程序都有一个差不多的程序结构:一个处理输入的循环,再每个元素上执行计算处理,在处理的同时或最后产生输出。我们来通过一些案例深入理解下这种程序结构

case 1:

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

1)定义一个map类型的变量,map是一个存储了键/值得集合,其中键和值都可以是任意类型,这里创建map使用内置的make函数。map类型在后面我们还会讲到

counts := make(map[string]int)

2)第二个变量input是通过bufio包下的NewScanner函数定义的,我们来对这个函数进行剥洋葱式的了解一下

input:= bufio.NewScanner(os.Stdin)

NewScanner函数有一个参数r,类型是io.Reader,同时返回值是*Scanner, 通过查看函数体我们发现它是一个结构体的引用(当某个变量本身很大,不方便传递时,我们往往选择用指针进行引用而不是直接传递这个变量)

func NewScanner(r io.Reader) *Scanner {
   return &Scanner{
      r:            r,
      split:        ScanLines,
      maxTokenSize: MaxScanTokenSize,
   }
}

让我们继续,io.Reader不是一个基础数据/符合数据类型其它非自定义类型,所以我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值