1. 程式人生 > >PHP編碼gzdeflate與Golang解碼DEFLATE

PHP編碼gzdeflate與Golang解碼DEFLATE

gzdeflate golang deflate 解碼 編碼

[email protected]:“數據存到redis是gzdeflate壓縮過的數據,golang從redis取出來,解壓縮失敗”。很多從PHP轉Golang的業務經常會遇到,所以寫下這篇博文,希望可以幫助更多人。
想要使用golang解碼php的編碼,那麽就應該需要知道gzdeflate函數的算法是什麽,先到gzdeflate文檔,查看了一下發現:
gzdeflate使用的是純粹的DEFLATE格式。這就與golang的compress/flate包一致了。有了了解就可以看著golang文檔實現代碼[email protected],最後定稿如下:

package mainimport (    "strings"
    "fmt"
    "compress/flate"
    "bytes"
    "io/ioutil"
    "github.com/bitly/go-simplejson")func main() {

    str:="test123"
    str=""
    b:=Gzdeflate(str,-1)
    ss:=Gzdecode(string(b))
    fmt.Println(ss)
}// 解碼func Gzdecode(data string) string  {    if data == "" {        return ""
    }
    r :=flate.NewReader(strings.NewReader(data))    defer r.Close()
    out, err := ioutil.ReadAll(r)    if err !=nil {
        fmt.Errorf("%s\n",err)        return ""
    }    return string(out)
}// 編碼func Gzdeflate(data string,level int) []byte  {    if data == "" {        return []byte{}
    }    var bufs bytes.Buffer
    w,_ :=flate.NewWriter(&bufs,level)
    w.Write([]byte(data))
    w.Flush()    defer w.Close()    return bufs.Bytes()
}// 編碼func GzdeflateForString(data string,level int) string  {    if data == "" {        return ""
    }    var bufs bytes.Buffer
    w,_ :=flate.NewWriter(&bufs,level)
    w.Write([]byte(data))
    w.Flush()    defer w.Close()    return bufs.String()
}

[email protected]續遇到的同學查看。


本文出自 “夢朝思夕” 博客,請務必保留此出處http://qiangmzsx.blog.51cto.com/2052549/1955868

PHP編碼gzdeflate與Golang解碼DEFLATE