使用go读取gzip格式的压缩包的操作
(编辑:jimmy 日期: 2024/11/25 浏览:3 次 )
我就废话不多说了,大家还是直接看代码吧~
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 range遍历结果不稳定问题