2020年7月13日月曜日

開発環境

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 コメント:

コメントを投稿