Go 言語の標準ライブラリは、gzip を含むいくつかの圧縮形式をサポートしているため、Go プログラムは、.gz 拡張子を持つ gzip 圧縮ファイルまたは .gz 以外の拡張子を持つ非圧縮ファイルをシームレスに読み書きできます。さらに、標準ライブラリには、.zip ファイル、tar パッケージ ファイル (.tar および .tar.gz) の読み取りと書き込み、および .bz2 ファイル (つまり、.tar .bz2 ファイル) の読み取りおよび書き込みのための関数も提供されます。
このセクションでは、zip アーカイブの読み取りと書き込みに焦点を当てます。
コンテンツ
表示
zip アーカイブを作成する
Go 言語には、圧縮ファイルを操作するための archive/zip パッケージが用意されています。次は、Go 言語を使用して zip ファイルを作成する方法を示す簡単な例です。サンプル コードは次のとおりです。
package main
import (
"archive/zip"
"bytes"
"fmt"
"os"
)
func main() {
// 圧縮ファイルの内容を保存するバッファを作成
buf := new(bytes.Buffer)
// 圧縮ファイルを作成
w := zip.NewWriter(buf)
// ファイルを圧縮ファイルに追加
var files = []struct {
Name, Body string
}{
{"Golang.txt", "https://it-kiso.com/golang/"},
}
for _, file := range files {
f, err := w.Create(file.Name)
if err != nil {
fmt.Println(err)
}
_, err = f.Write([]byte(file.Body))
if err != nil {
fmt.Println(err)
}
}
// 圧縮ファイルを閉じる
err := w.Close()
if err != nil {
fmt.Println(err)
}
// 圧縮ファイルの内容をファイルに書き込む
f, err := os.OpenFile("file.zip", os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
fmt.Println(err)
}
buf.WriteTo(f)
}
上記のファイルを実行すると、次の図に示すように、現在のディレクトリに file.zip ファイルが生成されます。
zip アーカイブを読む
.zip アーカイブの読み取りは、アーカイブを作成するのと同じくらい簡単ですが、アーカイブにパス付きのファイル名が含まれている場合は、ディレクトリ構造を再構築する必要があります。
サンプルコードは次のとおりです。
package main
import (
"archive/zip"
"fmt"
"io"
"os"
)
func main() {
// zipファイルを開く
r、err:= zip.OpenReader("file.zip")
if err!= nil {
fmt.Printf(err.Error())
}
defer r.Close()
// 圧縮ファイル内のファイルを反復処理して、内容を出力する
for _、f: = range r.File {
fmt.Printf("ファイル名:%s\n"、f.Name)
rc、err:= f.Open()
if err!= nil {
fmt.Printf(err.Error())
}
_、err = io.CopyN(os.Stdout、rc、int64(f.UncompressedSize64))
if err!= nil {
fmt.Printf(err.Error())
}
rc.Close()
}
}
操作の結果は次のようになります。
go run main.go
ファイル名: Golang.txt
https://it-kiso.com/golang/
「 Go 言語での zip アーカイブ ファイルの読み取りおよび書き込み操作」についてわかりやすく解説!絶対に観るべきベスト2動画
Go でファイルを読む方法を学びましょう!
Go言語とは?|プログラミング言語のGo言語について3分でわかりやすく解説します【プログラミング初心者向け】