首页 > 其他分享 >golang 使用gzip对json例子

golang 使用gzip对json例子

时间:2024-12-18 15:09:19浏览次数:12  
标签:return err nil golang Gzip json User gzip

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}

标签:return,err,nil,golang,Gzip,json,User,gzip
From: https://www.cnblogs.com/chen1880/p/18615018

相关文章

  • Fastjson2
    1.依赖<!--fastjson2--><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.49</version></dependency>2.使用2.1StringtojavaBeanString......
  • Golang学习笔记_12——结构体
    Golang学习笔记_09——if条件判断Golang学习笔记_10——SwitchGolang学习笔记_11——指针文章目录结构体1.定义2.访问&&修改3.零值初始化&使用指针初始化4.匿名字段和嵌套结构体5.结构体方法和接收者源码结构体Go语言中的结构体(struct)是一种复合数据......
  • 使用 Golang 和模板引擎创建网站
    使用Golang和模板引擎创建网站原创 源自开发者 源自开发者 2024年12月17日12:57 广东在过去,人们通常使用HTML、CSS和JavaScript来构建网站,同时在后端使用PHP。如今,已经有许多JavaScript框架可供选择,比如React.js、Next.js、Vue.js、Nuxt、Svelte、SvelteKit......
  • 睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注
    睡岗和玩手机数据集,4653张原始图,支持YOLO,VOCXML,COCOJSON格式的标注数据集分割训练组70%        3257图片有效集20%        931图片测试集10%        465图片预处理没有采用任何预处理步骤。增强未应用任何增......
  • 泛微云桥e-Bridge addTasteJsonp存在SQL注入漏洞
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • 跨域资源访问:JSONP、CORS、代理服务器,油猴脚本ajax
    跨域资源访问主要有:JSONP,CORS,反向代理解决:两个不同域名之间相互访问,但拥有同源策略的限制(两个URL的protocol、port和host都相同的话)。跨源资源共享(CORS)客户端和服务器之间的简单交换,使用CORS标头字段来处理权限1.简单请求比如说,假如站点 https://foo.example 的......
  • 说说你对Gzip压缩的了解
    Gzip压缩在前端开发中扮演着重要角色,它是一种用于改进Web应用程序性能的技术。以下是我对Gzip压缩的详细了解:一、Gzip压缩的基本概念Gzip是GNUzip的缩写,是一种广泛使用的文件压缩格式,特别适用于Web上的文本文件压缩。它采用LZ77算法与Huffman编码相结合的方式进行压缩,是一种无......
  • Jackson的@JsonSubTypes注解
    1.概述Jackson是一个关键的Java库,擅长将Java对象转换为JSON格式以及反向操作。在Java中处理对象层次结构和多态性时,将JSON反序列化回正确的子类型可能会变得具有挑战性。Jackson的@JsonSubTypes注解有助于解决这个问题。@JsonSubTypes注解概览@JsonSubTypes注解与@Jso......
  • Jackson@JsonTypeInfo 注解
    1.概述Jackson是一个强大的Java库,以其将Java对象转换为JSON格式及反向操作的能力而闻名。在处理多态类型时,需要在序列化的JSON中包含类型信息以确保正确的反序列化。Jackson提供的@JsonTypeInfo注解帮助解决了这个挑战。@JsonTypeInfo注解概览@JsonTypeInfo注解用于指......
  • 代码审计之Fastjson
    写一个demopackagecn.anger.fastjsontest.demos.web;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassFastjsonController{publicstaticvoidmain(String[]args){//利用Fastjson去解析变量数据......