golang手工安装第三方包(Golang tar包解压和压缩,内存操作)

生活常识 2023-04-19 20:08生活常识www.baidianfengw.cn

如何解压tar.gz文件戈朗焦油包解压和压缩,内存操作

tar.gz包压缩

类型TarFileContent结构{Name stringContent []byte}//直接写到文件func写入文件(tarfile list[]tarfile content,file os .文件)错误{//如果不是gzip格式,可以直接用焦油NewWriter(file)gz :=gzip .NewWriter(file)tw :=tar .NewWriter(gz)defer func() {tw .关闭()广州.Close()}()for _,f :=range tarFileList { HDR :=tar .Header{Name: f.Name,Mode: 0644,Size: int64(len(f.Content)),ModTime: time .现在(),键入标志焦油.TypeReg,}err :=tw .如果出错,则写入标题(hdr)!=nil {return err}_,err=tw .写(f。内容)如果出错!=nil {return err}}return nil}//写到内存func write to buf(tarfile list[]tarfile content,buf bytes .缓冲区)错误{gz :=gzip .NewWriter(buf)tw :=tar .NewWriter(gz)defer func() {tw .关闭()广州.Close()}()for _,f :=range tarFileList { HDR :=tar .Header{Name: f.Name,Mode: 0644,Size: int64(len(f.Content)),ModTime: time .现在(),键入标志焦油.TypeReg,}err :=tw .如果出错,则写入标题(hdr)!=nil {return err}_,err=tw .写(f。内容)如果出错!=nil {return err}}return nil}//测试写到内存测试内容列表=[]目标文件内容。meta。 ON ` { a 和。aaa } `、}、{ x1/x1 . ON ;` { x1:xxxx } `、}、{ x2/x2 . ON ;` { x2:xxxx } `,},}buf :=new(字节.buffer)写入tobuf(测试内容列表,buf)

tar.gz包解压

func parse tarData(tarData[]byte)([]tarfile内容,错误){bf :=bytes .NewBuffer(tarData)//如果不是gzip格式,可以直接用焦油NewReader(bf)gr,err :=gzip .NewReader(bf)if err!=nil {返回nil,err }延迟组Close()tr :=tar .NewReader(gr)tar内容列表=make([]tarfile content,0)for {hdr,err :=tr .如果err==io,则为下一个().EOF {break //End of archive}if err!=nil {return nil,err }如果hdr .Typeflag==tar .TypeDir {continue}fileData,err :=ioutil .如果出错,则读取全部(tr)!=nil {return nil,err } tar内容列表=append(tar内容列表,TarFileContent{Name: hdr .名称, 内容 文件数据})} }返回tar内容列表,nil}

在压缩水手包时,写完所有二进制之后,需要先把tw.Close(),再把gw.Close(),这两个顺序一定不能颠倒,不然格式会出错,少写入512个字节。

戈朗直接读取压缩包文件戈朗读取的配置文件怎么上线

Copyright@2015-2025 白癜风网版板所有