Skip to content
Go to file


Simple and fast concurrent downloader.

InstallationCLI UsageModule UsageLicense



Comparison in cloud server:

[root@centos-nyc-12 ~]# time got -o /tmp/test -c 20
URL: done!

real    0m8.832s
user    0m0.203s
sys 0m3.176s

[root@centos-nyc-12 ~]# time curl --output /tmp/test1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
								 Dload  Upload   Total   Spent    Left  Speed
100 1024M  100 1024M    0     0  35.6M      0  0:00:28  0:00:28 --:--:-- 34.4M

real    0m28.781s
user    0m0.379s
sys 0m1.970s


Download and install the latest release:

# go to tmp dir.
cd /tmp

# Download latest version.
curl -sfL | sh

# Make the binary executable.
chmod +x /tmp/bin/got

# Move the binary to your PATH
sudo mv /tmp/bin/got /usr/bin/got

Or Go ahead compile it yourself:

go get

Or from the AUR

Install got for the latest release version or got-git for the latest development version.

Note: these packages are not maintained by melbahja

Command Line Tool Usage

Simple usage:


You can specify destination path:

got -o /path/to/save

You can download multiple URLs and save them to directory:

got --dir /path/to/dir

You can download multiple URLs from a file:

got --dir /path/to/dir -f urls.txt

You can pipe multiple URLs:

cat urls.txt | got --dir /path/to/dir

Docs for available flags:

got help

Module Usage

You can use Got to download large files in your go code, the usage is simple as the CLI tool:

package main

import ""

func main() {

	g := got.New()

	err := g.Download("http://localhost/file.ext", "/path/to/save")

	if err != nil {
		// ..

For more see PkgDocs.

How It Works?

Got takes advantage of the HTTP range requests support in servers RFC 7233, if the server supports partial content Got split the file into chunks, then starts downloading and merging the chunks into the destinaton file concurrently.


Got is provided under the MIT License © Mohammed El Bahja.

You can’t perform that action at this time.