05 - 查找重复行3 深一步了解go

  • 前2节已经对 dup 做了深一步的解析, dup1dup2都是以数据流的形式输入。理论上可以处理任意多行的输入数据,它是一步一步以数据流的方式读取数据。另外还可以一口气将数据全部读取到内存中,一次分割成多行,然后在处理

一、 dup3

运行路径:

$GOPATH/src/gopl/ch1/dup/

运行方式:

go run dup3.go input.txt

input.txt里面的数据全部读到内存后的处理结果:
在这里插入图片描述

二、程序分析

将文件中的数据全部读入在内存当中,调用 split 函数以 换行符 作为分割,然后依次处理。这个例子引入了ReadFile函数(来自于io/ioutil包),其读取指定文件的全部内容,strings.Split函数把字符串分割成子串的切片。(Split的作用与trings.Join相反。),由于ReadFile函数需要文件名作为参数,因此只读指定文件,不读标准输入。

package main

import (
    "fmt"
    "io/ioutil"
    "os"
    "strings"
)

func main() {
    counts := make(map[string]int)
    for _, filename := range os.Args[1:] {
        data, err := ioutil.ReadFile(filename)
        if err != nil{
            fmt.Fprintf(os.Stderr, "dup3:%v \n", err)
            continue
        }

        for _, line := range strings.Split(string(data), "\n"){
            counts[line]++
        }
    }

    for line, n := range counts {
        if n > 1 {
            fmt.Printf("%d \t %s\n", n, line)
        }
    }
}

io/ioutil 包和strings 包

  • ioutil 提供了大量 IO 有关的函数,其中 ReadFile 提供将文件中的所有数据读取的内存中,返回二个参数,第一个是 []byte 的切片,第二个是内置 error 类型, 更多关于 ioutil 包的 API可以查看 golang 官网文档: https://golang.org/pkg/io/ioutil/
    在这里插入图片描述

  • strings 提供了大量用于操作字符的简单函数,在源代码中 strings.Split(string(data), “\n”), 其中 string(data)[]byte的数据转化为 string 类型(类似于 C++ 的构造函数),在通过 Split 函数,以 “\n” 作为分割的标准, strings.Split(string(data), “\n”)函数返回 []string类型,更多关于 strings 包的 API可以查看 golang 官网文档: https://golang.org/pkg/strings

  • 在这里插入图片描述

总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值