開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
Go Systems Programming: Master Linux and Unix system level programming with Go (渋川 よしき(著)、ごっちん(イラスト)、ラムダノート)、第3章(低レベルアクセスへの入り口2:io.Reader)、3.9(問題)、Q3.3(zipファイルの書き込み)の解答を求めてみる。
コード
package main
import (
"archive/zip"
"fmt"
"io"
"os"
"strings"
)
func eprintln(err error) {
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func main() {
file, err := os.Create("temp.zip")
eprintln(err)
defer file.Close()
zipWriter := zip.NewWriter(file)
defer zipWriter.Close()
reader := strings.NewReader(`package main
import (
"archive/zip"
"fmt"
"io"
"os"
"strings"
)
func eprintln(err error) {
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func main() {
file, err := os.Create("temp.zip")
eprintln(err)
defer file.Close()
zipWriter := zip.NewWriter(file)
defer zipWriter.Close()
reader := strings.NewReader("Hello, 日本語!")
writer, err := zipWriter.Create("newfile.txt")
eprintln(err)
io.Copy(writer, reader)
}
`)
writer, err := zipWriter.Create("newfile.txt")
eprintln(err)
_, err = io.Copy(writer, reader)
eprintln(err)
}
入出力結果(Zsh、PowerShell、Terminal)
% go build
% ./writezip
% ls
./ ../ main.go temp.zip writezip*
% unzip temp.zip
Archive: temp.zip
inflating: newfile.txt
% ls -S temp.zip newfile.txt
newfile.txt temp.zip
%
0 コメント:
コメントを投稿