Skip to content

Instantly share code, notes, and snippets.

@SRsawaguchi
Created October 3, 2019 12:47
Show Gist options
  • Save SRsawaguchi/3ce9b465b8a4297b5673e536288432a1 to your computer and use it in GitHub Desktop.
Save SRsawaguchi/3ce9b465b8a4297b5673e536288432a1 to your computer and use it in GitHub Desktop.
How to create tar file in Golang
package main
import (
"archive/tar"
"fmt"
"io"
"os"
"time"
)
func main() {
// tarファイルの作成
tarFile, err := os.Create("dest/archive.tar")
if err != nil {
fmt.Println("tarファイルが作成できなかった。")
return
}
// tarWriter経由でtarにファイルを追加していく。
tarWriter := tar.NewWriter(tarFile)
defer tarWriter.Close()
// ディスク上のファイルをtarに追加する。
file, err := os.Open("src/hoge.txt")
if err != nil {
fmt.Println("ファイルが開けなかった。")
return
}
stat, err := file.Stat()
if err != nil {
fmt.Println("ファイルの状態が取得できなかった。")
return
}
header := &tar.Header{
Name: "hoge.txt", //ここでsrc/hoge.txtと指定すると、解答時にそのPATHになる。
Mode: int64(stat.Mode()),
ModTime: stat.ModTime(),
Size: stat.Size(),
}
//https://golang.org/pkg/archive/tar/#Header
err = tarWriter.WriteHeader(header)
if err != nil {
fmt.Errorf("headerを書き込めなかった")
return
}
_, err = io.Copy(tarWriter, file)
if err != nil {
fmt.Errorf("ファイルをコピー出来なかった")
return
}
// 変数のデータをtarに追加する
data := "Hello world!!"
header = &tar.Header{
Name: "data/hello.txt",
Mode: 0644,
ModTime: time.Now(),
Size: int64(len(data)),
}
err = tarWriter.WriteHeader(header)
if err != nil {
fmt.Errorf("headerを書き込めなかった")
return
}
_, err = tarWriter.Write([]byte(data))
if err != nil {
fmt.Println("tarに書き込めなかった")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment