ex03

command
v0.0.0-...-c93e153 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2018 License: MIT Imports: 5 Imported by: 0

README

Q3.3 : zipファイルの書き込み

OSのデバイスにリンクされたio.Writerio.Readerは、1つのファイルやデバイスと1対1に対応しています。Go言語が提供するライブラリには、1つのファイルで複数のio.Writerio.Readerに対応しているものもあります。 複数ファイルを格納するアーカイブフォーマットであるtarzipファイルや、インターネットのマルチパート形式(ブラウザのフォームによって作られるデータやファイルを複数格納するデータ構造)をサポートするmime/multipartパッケージの構造体は、中に格納されるひとつひとつの要素がio.Writerio.ReadCloserになっています。
archive/zipパッケージを使ってzipファイルを作成してみましょう。出力先のファイルのWriter(以下のコードのfile)をまず作って、それをzip.NewWriter()関数に渡すと、zipファイルの書き込み用の構造体が出来ます。最後にClose()を確実に呼ぶ必要がありますが、これにはGo言語のdeferという機能を使って次のようにすればよいでしょう。

zipWriter := zip.NewWriter()
defer zipWriter.Close()

この構造体そのものはio.Writerではありませんが、Create()メソッドを呼ぶと、個別のファイルを書き込むためのio.Writerが返ってきます。

writer, err := zipWriter.Create("newfile.txt")

上記の例では、newfile.txtという実際のファイルが、最初に作った出力先ファイルfileへと圧縮されます。では、実際のファイルではなく、文字列strings.Readerを使ってzipファイルを作成するにはどうすればいいでしょうか。考えてみてください。

Result

$ gor zipstrings.go
$ unzip temp.zip
Archive:  temp.zip
  inflating: test
$ cat test
content of file in zip%

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL