このセクションでは、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/






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





