Skip to content

Instantly share code, notes, and snippets.

@bluele
Created September 28, 2015 05:18
Show Gist options
  • Select an option

  • Save bluele/03e2249d81bf66b9a874 to your computer and use it in GitHub Desktop.

Select an option

Save bluele/03e2249d81bf66b9a874 to your computer and use it in GitHub Desktop.

Revisions

  1. bluele created this gist Sep 28, 2015.
    53 changes: 53 additions & 0 deletions targz.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    package main

    import (
    "archive/tar"
    "compress/gzip"
    "io/ioutil"
    "log"
    "os"
    "path"
    )

    const (
    inputPath = "input/targz.go"
    outputPath = "output/targz.go.tar.gz"
    )

    func main() {
    var file *os.File
    var err error
    var writer *gzip.Writer
    var body []byte

    if file, err = os.OpenFile(outputPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644); err != nil {
    log.Fatalln(err)
    }
    defer file.Close()

    if writer, err = gzip.NewWriterLevel(file, gzip.BestCompression); err != nil {
    log.Fatalln(err)
    }
    defer writer.Close()

    tw := tar.NewWriter(writer)
    defer tw.Close()

    if body, err = ioutil.ReadFile(inputPath); err != nil {
    log.Fatalln(err)
    }

    if body != nil {
    hdr := &tar.Header{
    Name: path.Base(inputPath),
    Mode: int64(0644),
    Size: int64(len(body)),
    }
    if err := tw.WriteHeader(hdr); err != nil {
    println(err)
    }
    if _, err := tw.Write(body); err != nil {
    println(err)
    }
    }
    }