我就廢話不多說(shuō)了,大家還是直接看代碼吧~
package main // 引入所需包 import ( "os" "compress/gzip" "io/ioutil" "fmt" ) // gzip文件 var fn = "./113.200.251.66_1510825558_A6D39783B05943D8ACA64F397748CF1B_vdn.gz" func main() { println(fn) // 打開(kāi)本地gz格式壓縮包 fr, err := os.Open(fn) if err != nil { panic(err) } else { println("open file success!") } // defer: 在函數(shù)退出時(shí),執(zhí)行關(guān)閉文件 defer fr.Close() // 創(chuàng)建gzip文件讀取對(duì)象 gr, err := gzip.NewReader(fr) if err != nil { panic(err) } // defer: 在函數(shù)退出時(shí),執(zhí)行關(guān)閉gzip對(duì)象 defer gr.Close() // 讀取gzip對(duì)象內(nèi)容 rBuf, err := ioutil.ReadAll(gr) if err != nil { fmt.Println("[read gzip data err]: ", err) } // 以文本形式輸出 fmt.Printf("%s\n", rBuf) }
輸出: ABCDEFG
補(bǔ)充:golang通過(guò)在線讀取請(qǐng)求url返回的zip內(nèi)部?jī)?nèi)容
訪問(wèn)url返回的zip包,怎么直接解析zip中的文件并獲取文件中的信息呢?
以前都是用java語(yǔ)言做這些事情,今天閑來(lái)蛋疼,用golang也實(shí)現(xiàn)了一下,效果已經(jīng)發(fā)布在我的公眾號(hào):j全家桶---激活碼中。
引用了以下包:
"archive/zip" "bufio" "bytes" "fmt" "io" "io/ioutil" "net/http" "os"
1、通過(guò)http包內(nèi)部方法,請(qǐng)求了需要訪問(wèn)的url,這次只是為了分享在線解析zip,所以地址就不寫出來(lái)了。
2、讀取字節(jié)流并新建一個(gè)讀卡器指定讀取大小,最好弄個(gè)延遲關(guān)閉流不然內(nèi)存泄露那是必須的。
3、接下來(lái)就是獲取zip中的信息,只需要遍歷一下讀取到的文件把數(shù)據(jù)取出來(lái)就行了
其實(shí)還是蠻簡(jiǎn)單的,只是golang語(yǔ)言用得少,對(duì)于流的操作也比較少所以寫一個(gè)今天實(shí)現(xiàn)這個(gè)功能的總結(jié),點(diǎn)滴積累厚積薄發(fā)!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
標(biāo)簽:電子產(chǎn)品 海南 西雙版納 安康 儋州 物業(yè)服務(wù) 遼寧 青海
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用go讀取gzip格式的壓縮包的操作》,本文關(guān)鍵詞 使用,讀取,gzip,格式,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。