Golang : Unzip file
Go's standard library provides support for several archive file formats. Zip format is the most common standard of compressing file. It is easy to unzip zip file in Go. Below is the code to unzip a zip file.
gounzip.go
package main
import (
"archive/zip"
"flag"
"fmt"
"io"
"os"
"path/filepath"
)
func main() {
flag.Parse() // get the arguments from command line
zipfile := flag.Arg(0)
if zipfile == "" {
fmt.Println("Usage : gounzip sourcefile.zip")
os.Exit(1)
}
reader, err := zip.OpenReader(zipfile)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer reader.Close()
for _, f := range reader.Reader.File {
zipped, err := f.Open()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer zipped.Close()
// get the individual file name and extract the current directory
path := filepath.Join("./", f.Name)
if f.FileInfo().IsDir() {
os.MkdirAll(path, f.Mode())
fmt.Println("Creating directory", path)
} else {
writer, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, f.Mode())
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer writer.Close()
if _, err = io.Copy(writer, zipped); err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("Decompressing : ", path)
}
}
}
Build the executable and
test out the
./gounzip somefile.zip
Sample out :
./gounzip v1.8.31.2-beta.zip
Creating directory ngx_pagespeed-1.8.31.2-beta
Decompressing : ngx_pagespeed-1.8.31.2-beta/.gitignore
Decompressing : ngx_pagespeed-1.8.31.2-beta/LICENSE
Decompressing : ngx_pagespeed-1.8.31.2-beta/README.md
Decompressing : ngx_pagespeed-1.8.31.2-beta/config
Decompressing : ngxpagespeed-1.8.31.2-beta/cppfeature
Creating directory ngx_pagespeed-1.8.31.2-beta/scripts
...
References:
See also : Golang : Zip file
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+3.3k Golang : Tell color name with OpenCV example
+2.6k Golang : Combine slices of complex numbers and operation example
+5.9k Golang : Display list of time zones with GMT
+1.7k Linux : How to fix Brother HL-1110 printing blank page problem
+2.8k Golang : Example of custom handler for Gorilla's Path usage.
+4.4k Golang : Secure file deletion with wipe example
+4.8k JavaScript/JQuery : Detect or intercept enter key pressed example
+8.9k Golang : [json: cannot unmarshal object into Go value of type]
+3.6k Golang : Format strings to SEO friendly URL example
+6.7k Golang : md5 hash of a string
+4.3k Golang : Remove or trim extra comma from CSV
+30.5k Golang : How to get time in milliseconds?