golang 使用gzip对json例子

package main

import (

"bytes"

"compress/gzip"

"encoding/json"

"fmt"

"io"

"log"

)

// User 结构体定义

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

Fee float64 `json:"fee"`

}

// gzipCompress 将任何类型的接口压缩为 Gzip 格式

func gzipCompress(v interface{}) ([]byte, error) {

// 将结构体转换为JSON字节切片

jsonData, err := json.Marshal(v)

if err != nil {

return nil, err

}

var buf bytes.Buffer

// 创建Gzip Writer

w := gzip.NewWriter(&buf)

if _, err := w.Write(jsonData); err != nil {

return nil, err

}

// 关闭Gzip Writer

if err := w.Close(); err != nil {

return nil, err

}

return buf.Bytes(), nil

}

// gzipDecompress 解压缩 Gzip 数据,填充到目标结构体

func gzipDecompress(compressedData []byte, v interface{}) error {

r, err := gzip.NewReader(bytes.NewReader(compressedData))

if err != nil {

return err

}

defer r.Close()

// 读取解压缩后的数据

decompressedData, err := io.ReadAll(r)

if err != nil {

return err

}

// 将JSON数据解码到目标结构体

return json.Unmarshal(decompressedData, v)

}

// 主函数

func main() {

// 创建示例用户数据

user := User{

ID: 1,

Name: "Alice",

Age: 30,

Fee: 1500.00,

}

// 压缩JSON数据

compressedData, err := gzipCompress(user)

if err != nil {

log.Fatal(err)

}

fmt.Printf("Compressed Data (Gzip bytes): %v\n", compressedData)

// 解压缩回原始的用户数据

var decompressedUser User

if err := gzipDecompress(compressedData, &decompressedUser); err != nil {

log.Fatal(err)

}

// 输出解压缩后的数据

fmt.Printf("Decompressed User: %+v\n", decompressedUser)

}

输出:

Compressed Data (Gzip bytes): [31 139 8 0 0 0 0 0 0 255 170 86 202 76 81 178 50 212 81 202 75 204 77 85 178 82 114 204 201 76 78 85 210 81 74 76 79 85 178 50 54 208 81 74 75 77 85 178 50 52 53 48 168 5 4 0 0 255 255 212 252 187 47 43 0 0 0]

Decompressed User: {ID:1 Name:Alice Age:30 Fee:1500}

相关推荐
1candobetter1 小时前
JAVA后端开发——Spring Boot 组件化自动配置机制
java·开发语言·spring boot
一个网络学徒1 小时前
python练习3
开发语言·python
专注VB编程开发20年1 小时前
无 $ 后缀的变体版函数(Mid、InStr)
java·开发语言
程序员敲代码吗1 小时前
C++运行库修复指南:解决游戏办公软件报错问题
开发语言·c++·游戏
熊猫钓鱼>_>1 小时前
深入理解Java堆栈:从原理到面试实战
java·开发语言·面试·职场和发展·面向对象·堆栈·oop
孞㐑¥1 小时前
算法—哈希表
开发语言·c++·经验分享·笔记·算法
骆驼爱记录1 小时前
Word通配符技巧:高效文档处理指南
开发语言·c#·自动化·word·excel·wps·新人首发
仟濹1 小时前
【Java加强】2 泛型 | 打卡day1
java·开发语言
maplewen.1 小时前
C++11 std::function
开发语言·c++
阿里嘎多学长2 小时前
2026-02-02 GitHub 热点项目精选
开发语言·程序员·github·代码托管