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

Golang使用gzip壓縮字符減少redis等存儲占用的實現(xiàn)

 更新時間:2023年01月31日 11:13:31   作者:少林碼僧  
本文主要介紹了Golang使用gzip壓縮字符減少redis等存儲占用的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文主要介紹了Golang使用gzip壓縮字符減少redis等存儲占用的實現(xiàn),分享給大家,具體如下:

package compression

import (
?? ?"bytes"
?? ?"compress/gzip"
?? ?"encoding/json"
)

func GzipEncode(input []byte) ([]byte, error) {
?? ?// 創(chuàng)建一個新的 byte 輸出流
?? ?var buf bytes.Buffer
?? ?// 創(chuàng)建一個新的 gzip 輸出流

?? ?//NoCompression ? ? ?= flate.NoCompression ? ? ?// 不壓縮
?? ?//BestSpeed ? ? ? ? ?= flate.BestSpeed ? ? ? ? ?// 最快速度
?? ?//BestCompression ? ?= flate.BestCompression ? ?// 最佳壓縮比
?? ?//DefaultCompression = flate.DefaultCompression // 默認壓縮比
?? ?//gzip.NewWriterLevel()
?? ?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
}

func GzipDecode(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 中讀取出數(shù)據
?? ?if _, err := buf.ReadFrom(gzipReader); err != nil {
?? ??? ?return nil, err
?? ?}
?? ?return buf.Bytes(), nil
}

// 壓縮
func MarshalJsonAndGzip(data interface{}) ([]byte, error) {
?? ?marshalData, err := json.Marshal(data)
?? ?if err != nil {
?? ??? ?return nil, err
?? ?}
?? ?gzipData, err := GzipEncode(marshalData)
?? ?if err != nil {
?? ??? ?return nil, err
?? ?}
?? ?return gzipData, err
}

// 解壓
func UnmarshalDataFromJsonWithGzip(input []byte, output interface{}) error {
?? ?decodeData, err := GzipDecode(input)
?? ?if err != nil {
?? ??? ?return err
?? ?}

?? ?err = json.Unmarshal(decodeData, output)
?? ?if err != nil {
?? ??? ?return err
?? ?}
?? ?return nil
}

到此這篇關于Golang使用gzip壓縮字符減少redis等存儲占用的實現(xiàn)的文章就介紹到這了,更多相關Golang gzip壓縮減少存儲占用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang結合mysql設置最大連接數(shù)和最大空閑連接數(shù)

    golang結合mysql設置最大連接數(shù)和最大空閑連接數(shù)

    本文介紹golang?中連接MySQL時,如何設置最大連接數(shù)和最大空閑連接數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Golang HTTP請求Json響應解析方法以及解讀失敗的原因

    Golang HTTP請求Json響應解析方法以及解讀失敗的原因

    這篇文章主要介紹了Golang HTTP請求Json響應解析方法以及解讀失敗的原因,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • go gin+token(JWT)驗證實現(xiàn)登陸驗證

    go gin+token(JWT)驗證實現(xiàn)登陸驗證

    本文主要介紹了go gin+token(JWT)驗證實現(xiàn)登陸驗證,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang websocket 服務端的實現(xiàn)

    golang websocket 服務端的實現(xiàn)

    這篇文章主要介紹了golang websocket 服務端的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Golang中如何對MySQL進行操作詳解

    Golang中如何對MySQL進行操作詳解

    這篇文章主要給大家介紹了關于在Golang中如何對MySQL進行操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Golang具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • Go語言基礎學習教程

    Go語言基礎學習教程

    這篇文章主要介紹了Go語言基礎知識,包括基本語法、語句、數(shù)組等的定義與用法,需要的朋友可以參考下
    2016-07-07
  • Go語言中的空值(nil)與零值(zerovalue)區(qū)別詳解

    Go語言中的空值(nil)與零值(zerovalue)區(qū)別詳解

    在Go語言中,空值(nil)和零值(zero value)是兩個不同的概念,它們在語義、使用場景以及實際的編程實踐中有著明顯的區(qū)別,理解這兩者的差異對于編寫清晰、健壯的Go代碼至關重要,需要的朋友可以參考下
    2024-06-06
  • 一文帶你熟悉Go語言中函數(shù)的使用

    一文帶你熟悉Go語言中函數(shù)的使用

    這篇文章主要和大家分享一下Go語言中的函數(shù)的使用,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-11-11
  • Go Plugins插件的實現(xiàn)方式

    Go Plugins插件的實現(xiàn)方式

    目前 Plugins 僅在 Linux、FreeBSD 和 macOS 上受支持,且只支持 golang 調用,今天通過本文給大家介紹Go Plugins插件的實現(xiàn)方式,感興趣的朋友一起看看吧
    2021-08-08
  • go實現(xiàn)腳本解釋器gscript

    go實現(xiàn)腳本解釋器gscript

    這篇文章主要為大家介紹了go實現(xiàn)腳本解釋器gscript示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論