Created
April 27, 2018 16:06
-
-
Save ilyaglow/51b744c33727d5a87441d37b701a4060 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"compress/gzip" | |
"flag" | |
"io" | |
"log" | |
"net/http" | |
"os" | |
) | |
func main() { | |
url := flag.String("url", "", "gz file URL") | |
saveName := flag.String("save", "", "location to save original file") | |
flag.Parse() | |
if *url == "" { | |
log.Fatal("URL is not set") | |
} | |
resp, err := http.Get(*url) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer resp.Body.Close() | |
var writePipes []*io.PipeWriter | |
gr, gw := io.Pipe() | |
writePipes = append(writePipes, gw) | |
var saveFile io.Writer | |
if *saveName != "" { | |
saveFile, err = os.Create(*saveName) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer saveFile.Close() | |
sr, sw := io.Pipe() | |
writePipes = append(writePipes, sw) | |
go func() { | |
if _, err := io.Copy(saveFile, sr); err != nil { | |
log.Fatal(err) | |
} | |
}() | |
} | |
wr := make([]io.Writer, len(writePipes)) | |
for i := range writePipes { | |
wr[i] = writePipes[i] | |
} | |
mw := io.MultiWriter(wr...) | |
go func() { | |
if _, err := io.Copy(mw, resp.Body); err != nil { | |
log.Fatal(err) | |
} | |
for i := range writePipes { | |
writePipes[i].Close() | |
} | |
}() | |
g, err := gzip.NewReader(gr) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer g.Close() | |
if _, err := io.Copy(os.Stdout, g); err != nil { | |
log.Fatal(err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment