8月7日@黄同学找我问:“数据存到复述是gzdeflate压缩过的数据,golang从复述,取出来,解压缩失败”。很多从PHP转golang的业务经常会遇到,所以写下这篇博文,希望可以帮助更多的人。
想要使用golang解码PHP的编码,那么就应该需要知道gzdeflate函数的算法是什么,先到gzdeflate文档,查看了一下发现:
<代码> gzdeflate使用的是纯粹的缩小格式> 代码。这就与golang的<代码>压缩/扁> 代码包一致了。有了了解就可以看着golang文档实现代码了,遂与@黄同学同学写了几个函数进行验证,最后定稿如下:
package 主要 import ( “弦” “fmt” “压缩/扁” “字节” “io/ioutil” ) func main (), { str:=" huangyupeng123 " b:=Gzdeflate (str, 1) ss:=Gzencode(字符串(b)) fmt.Println (ss)/* str:=" huangyupeng123 " ss:=Gzdeflate (str, 0) fmt.Println (ss) s=Gzencode (ss) fmt.Println */}//,解码 func Gzencode (data 字符串),string , { r :=flate.NewReader (strings.NewReader(数据) defer r.Close () ,,err :=, ioutil.ReadAll(右) if err  !=nil { fmt.Errorf (“% s \ n”,犯错) } return 字符串(出) }//,编码 func Gzdeflate (data 字符串,level int), [] byte , { var bufs  bytes.Buffer w, _ :=flate.NewWriter(和缓冲区,级别) w.Write([]字节(数据)) w.Flush () w.Close () return bufs.Bytes () }//,编码 func GzdeflateForString (data 字符串,level int), string , { var bufs  bytes.Buffer w, _ :=flate.NewWriter(和缓冲区,级别) w.Write([]字节(数据)) w.Flush () defer w.Close () return bufs.String () }
经过@黄同学同学测试可以正确使用。留下维基供后续遇到的同学查看。