Golang通过Gzip压缩数据
简介为了将一个大的数据进行压缩,可以采用Gzip的方式进行处理,那么在Go语言中如何通过Gzip方式压缩数据呢,在使用过程中大家也会跟我一样会踩坑。本文主要记录下问题和最终的实现方式。
通过Golang将数据通过Gzip进行压缩踩坑记录。直接贴代码如下:
package main
import (
"bytes"
"compress/gzip"
"io/ioutil"
)
/*
* Gzip压缩处理
*/
func GzipEncode(in []byte) ([]byte, error) {
var (
buffer bytes.Buffer
out []byte
err error
)
writer := gzip.NewWriter(&buffer)
//使用压缩等级
//writer, _ := gzip.NewWriterLevel(&buffer, 5)
//最开始一直把关闭放在了defer里面,但是这样压缩后数据为空
//查阅相关资料才知道:gzip压缩的过程中,Write之后一定要及时Close,不能defer,这样才能flush,否则得不到任何数据
/*defer func() {
err := writer.Close()
if err != nil {
logrus.Info("Gzip压缩失败", err.Error())
}
}()*/
_, err = writer.Write(in)
if err != nil {
err = writer.Close()
return out, err
}
if err = writer.Close(); err != nil {
return out, err
}
return buffer.Bytes(), nil
}
/*
* Gzip解压处理
*/
func GzipDecode(in []byte) ([]byte, error) {
reader, err := gzip.NewReader(bytes.NewReader(in))
if err != nil {
var out []byte
return out, err
}
defer func() {
if err = reader.Close(); err != nil {
println("Gzip解压失败", err.Error())
}
}()
return ioutil.ReadAll(reader)
}
func main() {
a, _ := GzipEncode([]byte("测试GZIP压缩"))
println("---------------压缩后数据---------------")
println(string(a))
b, _ := GzipDecode(a)
println("---------------解压后数据---------------")
println(string(b))
}
代码注释中已经说的比较清楚了,最开始是通过defer来close的,但是这样一直返回空数据。gzip压缩的过程中,Write之后一定要及时Close,不能defer,这样才能flush,否则得不到任何数据。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
Flutter开发windows桌面应用处理WebView相关问题
draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标。支持Github,Google Drive, One drive等网盘同步,并且永久免费。如果觉得使用Web版不方便,draw.io 也提供了多平台的离线桌面版可供下载。
chmod命令用于改变文件或目录的权限,但是只有文件或目录的属主和超级用户root才能修改。
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。