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
+41.4k Golang : Convert string to array/slice
+33.6k Golang : All update packages with go get command
+25.2k Golang : Convert uint value to string type
+9.1k Golang : Intercept and compare HTTP response code example
+6.1k Golang : Get missing location after unmarshal binary and gob decode time.
+6.8k Fix sudo yum hang problem with no output or error messages
+6.6k Golang : Derive cryptographic key from passwords with Argon2
+12.2k Golang : Display list of countries and ISO codes
+20.7k Golang : Convert date string to variants of time.Time type examples
+16.5k Golang : Delete files by extension
+33.7k Golang : convert(cast) bytes to string