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,否则得不到任何数据。
快速生成表格
符号表(Symbol Table)是一个非常常见的数据结构,在现实生活中应用很多。它是一个“键”—“值”对应的结构。在符号表中,存储的是键值对。通过输入键,查询对应的值。
图像添加(高斯/椒盐/泊松/斑点)噪声
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
为了能让虚拟机能连接网络,并且能与宿主机能相互进行访问,所以需要多虚拟机几种网络模式进行学习,以便后期能快速的进行配置。
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
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问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。