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

Go中Gzip與json搭配實(shí)現(xiàn)數(shù)據(jù)壓縮demo

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

正文

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

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用法 壓縮數(shù)據(jù)
func Encode(input []byte) ([]byte, error) {
    // 創(chuàng)建一個(gè)新的 byte 輸出流
    var buf bytes.Buffer
    // 創(chuàng)建一個(gè)新的 gzip 輸出流
    gzipWriter := gzip.NewWriter(&buf)
    // 將 input byte 數(shù)組寫入到此輸出流中
    _, err := gzipWriter.Write(input)
    if err != nil {
        _ = gzipWriter.Close()
        return nil, err
    }
    if err := gzipWriter.Close(); err != nil {
        return nil, err
    }
    // 返回壓縮后的 bytes 數(shù)組
    return buf.Bytes(), nil
}
// Gzip用法 解壓數(shù)據(jù)
func Decode(input []byte) ([]byte, error) {
    // 創(chuàng)建一個(gè)新的 gzip.Reader
    bytesReader := bytes.NewReader(input)
    gzipReader, err := gzip.NewReader(bytesReader)
    if err != nil {
        return nil, err
    }
    defer func() {
        // defer 中關(guān)閉 gzipReader
        _ = gzipReader.Close()
    }()
    buf := new(bytes.Buffer)
    // 從 Reader 中讀取出數(shù)據(jù)
    if _, err := buf.ReadFrom(gzipReader); err != nil {
        return nil, err
    }
    return buf.Bytes(), nil
}

以上就是Go中Gzip與json搭配實(shí)現(xiàn)數(shù)據(jù)壓縮demo的詳細(xì)內(nèi)容,更多關(guān)于Go 壓縮數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語(yǔ)言中database/sql的用法介紹

    Go語(yǔ)言中database/sql的用法介紹

    Go語(yǔ)言中的database/sql包定義了對(duì)數(shù)據(jù)庫(kù)的一系列操作,database/sql/driver包定義了應(yīng)被數(shù)據(jù)庫(kù)驅(qū)動(dòng)實(shí)現(xiàn)的接口,這些接口會(huì)被sql包使用,本文將詳細(xì)給大家介紹Go的database/sql的使用方法,需要的朋友可以參考下
    2023-05-05
  • Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容

    Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容

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

    golang jwt+token驗(yàn)證的實(shí)現(xiàn)

    這篇文章主要介紹了golang jwt+token驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 淺談Go語(yǔ)言不提供隱式數(shù)字轉(zhuǎn)換的原因

    淺談Go語(yǔ)言不提供隱式數(shù)字轉(zhuǎn)換的原因

    本文主要介紹了淺談Go語(yǔ)言不提供隱式數(shù)字轉(zhuǎn)換的原因,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • xorm根據(jù)數(shù)據(jù)庫(kù)生成go model文件的操作

    xorm根據(jù)數(shù)據(jù)庫(kù)生成go model文件的操作

    這篇文章主要介紹了xorm根據(jù)數(shù)據(jù)庫(kù)生成go model文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言繼承功能使用結(jié)構(gòu)體實(shí)現(xiàn)代碼重用

    Go語(yǔ)言繼承功能使用結(jié)構(gòu)體實(shí)現(xiàn)代碼重用

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

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

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

    golang包的引入機(jī)制詳解

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

    Go中的應(yīng)用配置管理詳解

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

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

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

最新評(píng)論