使用go读取gzip格式的压缩包的操作

 更新时间:2020年12月22日 15:56:15   作者:robertkun  
这篇文章主要介绍了使用go读取gzip格式的压缩包的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

package main
// 引入所需包
import (
  "os"
  "compress/gzip"
  "io/ioutil"
  "fmt"
)
// gzip文件
var fn = "./113.200.251.66_1510825558_A6D39783B05943D8ACA64F397748CF1B_vdn.gz"
func main() {
  println(fn)
  // 打开本地gz格式压缩包
  fr, err := os.Open(fn)
  if err != nil {
    panic(err)
  } else {
    println("open file success!")
  }
  // defer: 在函数退出时,执行关闭文件
  defer fr.Close()
  // 创建gzip文件读取对象
  gr, err := gzip.NewReader(fr)
  if err != nil {
      panic(err)
    }
  // defer: 在函数退出时,执行关闭gzip对象
  defer gr.Close()
  // 读取gzip对象内容
  rBuf, err := ioutil.ReadAll(gr)
  if err != nil {
    fmt.Println("[read gzip data err]: ", err)
  }
  // 以文本形式输出
  fmt.Printf("%s\n", rBuf)
}

输出: ABCDEFG

补充:golang通过在线读取请求url返回的zip内部内容

访问url返回的zip包,怎么直接解析zip中的文件并获取文件中的信息呢?

以前都是用java语言做这些事情,今天闲来蛋疼,用golang也实现了一下,效果已经发布在我的公众号:j全家桶---激活码中。

引用了以下包:

"archive/zip"
"bufio"
"bytes"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"

1、通过http包内部方法,请求了需要访问的url,这次只是为了分享在线解析zip,所以地址就不写出来了。

2、读取字节流并新建一个读卡器指定读取大小,最好弄个延迟关闭流不然内存泄露那是必须的。

3、接下来就是获取zip中的信息,只需要遍历一下读取到的文件把数据取出来就行了

其实还是蛮简单的,只是golang语言用得少,对于流的操作也比较少所以写一个今天实现这个功能的总结,点滴积累厚积薄发!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 详解Golang中使用map时的注意问题

    详解Golang中使用map时的注意问题

    Golang中的map是一种数据结构,它允许你使用键值对的形式存储和访问数据,map在Go中是非排序的,提供了高效查找、插入和删除元素的能力,特别是当键是不可变类型,本文给大家详细介绍了Golang中使用map时的注意问题,需要的朋友可以参考下
    2024-06-06
  • Go语言中字符串四种拼接方式的性能对比

    Go语言中字符串四种拼接方式的性能对比

    在go语言中,字符串是不可变的,因此字符串之间的拼接实际上是创建了一个新的字符串,如果频繁操作会对性能产生严重的影响,下面我们来看看Go语言中字符串四种常见拼接方式的性能对比吧
    2025-04-04
  • Golang基于JWT与Casbin身份验证授权实例详解

    Golang基于JWT与Casbin身份验证授权实例详解

    这篇文章主要为大家介绍了Golang基于JWT与Casbin实现身份验证授权实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 一文带你掌握Golang中的值类型和引用类型

    一文带你掌握Golang中的值类型和引用类型

    在 Golang 中,数据类型可以分为两大类:值类型(Value Types)和引用类型(Reference Types),理解这两种类型的区别对于理解 Golang 中的数据传递和内存管理是很重要的,下面就跟随小编一起深入了解一下它们吧
    2024-01-01
  • go交叉编译sqlite报错问题解决分析

    go交叉编译sqlite报错问题解决分析

    这篇文章主要为大家介绍了go交叉编译sqlite报错问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Golang语言JSON解码函数Unmarshal的使用

    Golang语言JSON解码函数Unmarshal的使用

    本文主要介绍了Golang语言JSON解码函数Unmarshal的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Go语言中配置实现Logger日志的功能详解

    Go语言中配置实现Logger日志的功能详解

    当我们正式开发go程序的时候,就会发现记录程序日志已经不是fmt.print这么简单了,所以我们需要专门的去存储日志文件,这篇文章主要介绍了在Go语言中配置实现Logger日志的功能,感兴趣的同学可以参考下文
    2023-05-05
  • golang使用DockerFile正确用法指南

    golang使用DockerFile正确用法指南

    docker在开发和运维中使用的场景越来越多,作为开发人员非常有必要了解一些docker的基本知识,而离我们工作中最近的也就是对应用的docker部署编排了,这篇文章主要给大家介绍了关于golang使用DockerFile的正确用法指南,需要的朋友可以参考下
    2024-03-03
  • Go语言实现超时的三种方法实例

    Go语言实现超时的三种方法实例

    超时在一些业务场景里非常普遍,下面这篇文章主要给大家介绍了关于Go语言实现超时的三种方法,文中通过实例代码介绍的非常详细,对大家学习或者使用Go语言具有一定的参考学习价值,需要的朋友可以参考下
    2022-07-07
  • Golang中下划线(_)的不错用法分享

    Golang中下划线(_)的不错用法分享

    golang中的下划线表示忽略变量的意思,也没有产生新的变量,但是后面的表达式依然会被执行,本文为大家整理了golang中下划线的一些不错的用法,需要的可以参考下
    2023-05-05

最新评论