最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ǔ)言中的并發(fā)goroutine底層原理

    Go語(yǔ)言中的并發(fā)goroutine底層原理

    這篇文章主要介紹了Go語(yǔ)言中的并發(fā)goroutine底層原理,介紹Go語(yǔ)言并發(fā)底層原理,以及對(duì)比Go語(yǔ)言并發(fā)與其他語(yǔ)言并發(fā)的優(yōu)劣,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • golang通過(guò)遞歸遍歷生成樹(shù)狀結(jié)構(gòu)的操作

    golang通過(guò)遞歸遍歷生成樹(shù)狀結(jié)構(gòu)的操作

    這篇文章主要介紹了golang通過(guò)遞歸遍歷生成樹(shù)狀結(jié)構(gòu)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Golang匯編之控制流深入分析講解

    Golang匯編之控制流深入分析講解

    這篇文章主要介紹了Golang匯編之控制流,程序執(zhí)行的流程主要有順序、分支和循環(huán)幾種執(zhí)行流程,本節(jié)主要討論如何將Go語(yǔ)言的控制流比較直觀地轉(zhuǎn)譯為匯編程序,或者說(shuō)如何以匯編思維來(lái)編寫Go語(yǔ)言代碼,感興趣的同學(xué)可以參考下文
    2023-05-05
  • golang基礎(chǔ)之waitgroup用法以及使用要點(diǎn)

    golang基礎(chǔ)之waitgroup用法以及使用要點(diǎn)

    WaitGroup是Golang并發(fā)的兩種方式之一,一個(gè)是Channel,另一個(gè)是WaitGroup,下面這篇文章主要給大家介紹了關(guān)于golang基礎(chǔ)之waitgroup用法以及使用要點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Go語(yǔ)言中for和range的性能比較

    Go語(yǔ)言中for和range的性能比較

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中for和range語(yǔ)句的使用以及性能比較,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-07-07
  • Go 微服務(wù)開(kāi)發(fā)框架DMicro設(shè)計(jì)思路詳解

    Go 微服務(wù)開(kāi)發(fā)框架DMicro設(shè)計(jì)思路詳解

    這篇文章主要為大家介紹了Go 微服務(wù)開(kāi)發(fā)框架DMicro設(shè)計(jì)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Go語(yǔ)言生產(chǎn)環(huán)境最常用、最可靠的包清單

    Go語(yǔ)言生產(chǎn)環(huán)境最常用、最可靠的包清單

    在開(kāi)發(fā)Go語(yǔ)言項(xiàng)目時(shí),包管理是一個(gè)非常重要的環(huán)節(jié),這篇文章主要介紹了Go語(yǔ)言生產(chǎn)環(huán)境最常用、最可靠包的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • 淺析Go中關(guān)于零值和空值判斷的問(wèn)題

    淺析Go中關(guān)于零值和空值判斷的問(wèn)題

    這篇文章主要是對(duì)零值和空值判斷現(xiàn)狀進(jìn)行簡(jiǎn)單的梳理和分享,文中的示例代碼講解詳細(xì),對(duì)我們深入了解go語(yǔ)言有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Golang中fsnotify包監(jiān)聽(tīng)文件變化的原理詳解

    Golang中fsnotify包監(jiān)聽(tīng)文件變化的原理詳解

    Golang提供了一個(gè)強(qiáng)大的fsnotify包,它能夠幫助我們輕松實(shí)現(xiàn)文件系統(tǒng)的監(jiān)控,本文將深入探討fsnotify包的原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • golang字符串本質(zhì)與原理詳解

    golang字符串本質(zhì)與原理詳解

    這篇文章主要介紹了golang字符串本質(zhì)與原理詳解,golang中的字符串指的是所有8比特位字節(jié)字符串的集合,通常是UTF-8編碼的文本,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06

最新評(píng)論

锦州市| 福贡县| 黎城县| 洛阳市| 绍兴县| 丰台区| 扬州市| 河北省| 镇巴县| 大安市| 太仓市| 安阳县| 大渡口区| 营山县| 东乌珠穆沁旗| 开平市| 奎屯市| 太仓市| 娱乐| 永定县| 大关县| 灌南县| 襄垣县| 遵化市| 娄烦县| 阳城县| 万州区| 迁西县| 台前县| 桂东县| 松江区| 义乌市| 乡城县| 双城市| 民勤县| 德江县| 大洼县| 罗源县| 黑山县| 开化县| 仙游县|