概要
たまーに使うことがあるので、忘れないうちにメモメモ。
/* archive/tar の サンプルです。 REFERENCES: - https://pkg.go.dev/archive/tar@latest */ package main import ( "archive/tar" "os" "time" ) func _err(err error) { if err != nil { panic(err) } } func main() { // tar.Writer を 取得 tw := tar.NewWriter(os.Stdout) // tar.Header を書き込み fh := tar.Header{ Name: "test.txt", Size: 11, Mode: 0644, ModTime: time.Now().Truncate(24 * time.Hour), } err := tw.WriteHeader(&fh) _err(err) // データを書き込み _, err = tw.Write([]byte("hello world")) _err(err) // 最後に Close() を呼んでおかないとtarファイルが生成できないので注意 _err(tw.Flush()) _err(tw.Close()) }
試すための Taskfile.yml (go-task用のファイル) は以下。
version: '3' env: FILE_NAME: test.tar tasks: default: cmds: - task: run - task: confirm - task: extract - task: clean run: cmds: - go run main.go > $FILE_NAME confirm: cmds: - file $FILE_NAME - tar -tf $FILE_NAME extract: cmds: - mkdir -p tmp - tar -xf $FILE_NAME --directory tmp - ls -l tmp clean: cmds: - rm $FILE_NAME - rm -rf tmp
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ task -d examples/singleapp/tarfilewrite/ task: [run] go run main.go > $FILE_NAME task: [confirm] file $FILE_NAME test.tar: POSIX tar archive task: [confirm] tar -tf $FILE_NAME test.txt task: [extract] mkdir -p tmp task: [extract] tar -xf $FILE_NAME --directory tmp task: [extract] ls -l tmp total 4 -rw-r--r-- 1 gitpod gitpod 11 Jun 20 00:00 test.txt task: [clean] rm $FILE_NAME task: [clean] rm -rf tmp
参考情報
最近Makefileの代わりに利用しているツールです。とても便利。
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。