欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go中Gzip與json搭配實現數據壓縮demo

 更新時間:2023年05月25日 09:06:50   作者:goper  
這篇文章主要為大家介紹了Go中Gzip與json搭配使用壓縮數據的實現demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

在日常工作中,如果遇到數據量大的情況,在db中是不能直接存儲某些字段的,一般會用json進行marshal為 byte存入。但是如果此時占用空間依舊過大,則可以考慮再用gzip 還進一步壓縮。

demo

package main
import (
    "bytes"
    "compress/gzip"
    "encoding/json"
)
func main() {
}
type anyStruct struct {
}
// 壓縮 與json搭配使用
func MarshalToJsonWithGzip(jsonData anyStruct) []byte {
    dataAfterMarshal, _ := json.Marshal(jsonData)
    dataAfterGzip, err := Encode(dataAfterMarshal)
    if err != nil {
        return nil
    }
    return dataAfterGzip
}
// 解壓 與json搭配使用
func UnmarshalDataFromJsonWithGzip(msg []byte) (*anyStruct, error) {
    dataAfterDecode, err := Decode(msg)
    if err != nil {
        return nil, err
    }
    data := &anyStruct{}
    err = json.Unmarshal(dataAfterDecode, data)
    if err != nil {
        return nil, err
    }
    return data, nil
}
// Gzip用法 壓縮數據
func Encode(input []byte) ([]byte, error) {
    // 創(chuàng)建一個新的 byte 輸出流
    var buf bytes.Buffer
    // 創(chuàng)建一個新的 gzip 輸出流
    gzipWriter := gzip.NewWriter(&buf)
    // 將 input byte 數組寫入到此輸出流中
    _, err := gzipWriter.Write(input)
    if err != nil {
        _ = gzipWriter.Close()
        return nil, err
    }
    if err := gzipWriter.Close(); err != nil {
        return nil, err
    }
    // 返回壓縮后的 bytes 數組
    return buf.Bytes(), nil
}
// Gzip用法 解壓數據
func Decode(input []byte) ([]byte, error) {
    // 創(chuàng)建一個新的 gzip.Reader
    bytesReader := bytes.NewReader(input)
    gzipReader, err := gzip.NewReader(bytesReader)
    if err != nil {
        return nil, err
    }
    defer func() {
        // defer 中關閉 gzipReader
        _ = gzipReader.Close()
    }()
    buf := new(bytes.Buffer)
    // 從 Reader 中讀取出數據
    if _, err := buf.ReadFrom(gzipReader); err != nil {
        return nil, err
    }
    return buf.Bytes(), nil
}

以上就是Go中Gzip與json搭配實現數據壓縮demo的詳細內容,更多關于Go 壓縮數據的資料請關注腳本之家其它相關文章!

相關文章

  • Go語言中database/sql的用法介紹

    Go語言中database/sql的用法介紹

    Go語言中的database/sql包定義了對數據庫的一系列操作,database/sql/driver包定義了應被數據庫驅動實現的接口,這些接口會被sql包使用,本文將詳細給大家介紹Go的database/sql的使用方法,需要的朋友可以參考下
    2023-05-05
  • Golang語言如何讀取http.Request中body的內容

    Golang語言如何讀取http.Request中body的內容

    這篇文章主要介紹了Golang語言如何讀取http.Request中body的內容問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • golang jwt+token驗證的實現

    golang jwt+token驗證的實現

    這篇文章主要介紹了golang jwt+token驗證的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 淺談Go語言不提供隱式數字轉換的原因

    淺談Go語言不提供隱式數字轉換的原因

    本文主要介紹了淺談Go語言不提供隱式數字轉換的原因,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • xorm根據數據庫生成go model文件的操作

    xorm根據數據庫生成go model文件的操作

    這篇文章主要介紹了xorm根據數據庫生成go model文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言繼承功能使用結構體實現代碼重用

    Go語言繼承功能使用結構體實現代碼重用

    今天我來給大家介紹一下在?Go?語言中如何實現類似于繼承的功能,讓我們的代碼更加簡潔和可重用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Golang環(huán)境搭建及打包和工具鏈詳解

    Golang環(huán)境搭建及打包和工具鏈詳解

    這篇文章主要介紹了Golang環(huán)境搭建及打包和工具鏈,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • golang包的引入機制詳解

    golang包的引入機制詳解

    本文深入探討了Go語言中如何創(chuàng)建、組織和管理代碼包,以及包引入的多種使用場景和最佳實踐,通過閱讀本文,希望能幫助大家獲得全面而深入的理解,進一步提升Go開發(fā)的效率和質量
    2023-09-09
  • Go中的應用配置管理詳解

    Go中的應用配置管理詳解

    這篇文章主要為大家介紹了Go中的應用配置管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Go Java算法之Excel表列名稱示例詳解

    Go Java算法之Excel表列名稱示例詳解

    這篇文章主要為大家介紹了Go Java算法之Excel表列名稱示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論