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
+10.1k Golang : How to tokenize source code with text/scanner package?
+10.6k Golang : Interfacing with PayPal's IPN(Instant Payment Notification) example
+35.2k Golang : Strip slashes from string example
+6k PHP : How to check if an array is empty ?
+9.2k Golang : Create and shuffle deck of cards example
+20.4k Golang : Pipe output from one os.Exec(shell command) to another command
+13.7k Golang : Check if an integer is negative or positive
+4k Detect if Google Analytics and Developer Media are loaded properly or not
+19k Golang : Check whether a network interface is up on your machine
+7.3k Golang : Check to see if *File is a file or directory
+11.8k Golang : How to parse plain email text and process email header?