Got: Simple golang package and CLI tool to download large files faster 🏃 than cURL and Wget!

Got.

Simple and fast concurrent downloader.

InstallationCLI UsageModule UsageLicense

Tests

Comparison

Comparison in cloud server:

[root@centos-nyc-12 ~]# time got -o /tmp/test -c 20 http://www.ovh.net/files/1Gio.dat
URL: http://www.ovh.net/files/1Gio.dat done!

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


[root@centos-nyc-12 ~]# time curl http://www.ovh.net/files/1Gio.dat --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

Installation

Download and install the latest release:

# go to tmp dir.
cd /tmp

# Download latest version.
curl -sfL https://git.io/getgot | 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 github.com/melbahja/got/cmd/got

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:

got https://example.com/file.mp4

You can specify destination path:

got -o /path/to/save https://example.com/file.mp4

You can download multiple URLs and save them to directory:

got --dir /path/to/dir https://example.com/file.mp4 https://example.com/file2.mp4

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 "github.com/melbahja/got"

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.

License

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

Owner
Mohamed El Bahja
Developer, FOSS Enthusiast.
Mohamed El Bahja
Comments
  • v0.2

    v0.2

    Adding support for multiple file downloads and Context

    Related PRs: #15 and #16

    The New API:

    Multiple file download

    g := got.New()
    
    // Optional
    // g.Client = your custom http client
    
    err := g.Download("http://lcoalhost/file.ext", "/path/to/save")
    

    Multiple files with context:

    g := got.NewWithContext(context.Background())
    
    // file 1
    err := g.Download("http://lcoalhost/file.ext", "/path/to/save1")
    
    // file 2
    err := g.Download("http://lcoalhost/file2.ext", "/path/to/save2")
    
    // Download config.
    err := g.Do(&got.Download{
    		URL:       "http://lcoalhost/file2.ext",
    		Dest:      "/path/to/save2",
    		Concurrency: 10,
    })
    

    Download Single file:

    
      ctx := context.Background()
    
    	dl := got.NewDownload(ctx,"http://lcoalhost/file.ext", "/path/to/save")
    
    	// Init
    	if err := dl.Init(); err != nil {
    		// err
    	}
    
    	// Start download
    	if err := dl.Start(); err != nil {
    		// err
    	}
    

    CLI

    Single file:

    got https://example.com/file.mp4
    

    Multiple files:

    got https://example.com/file.mp4 https://example.com/file2.mp4
    

    Multiple save to specific dir:

    got --dir /path/to/dir https://example.com/file.mp4 https://example.com/file2.mp4
    

    From stdin:

    cat file.txt | got --dir /dir
    

    From file:

    got --bf file.txt --dir /dir
    

    Waiting for your feedback: @suzaku @malusev998 @poldi1405 @xurwxj

  • Adding context.Context as parameter to Download.Start and Cancellation to the main Binary

    Adding context.Context as parameter to Download.Start and Cancellation to the main Binary

    1. Extracting context.Context from the internals of the Download.Start() method as placing it as parameters allows fine graned control over the cancellation. This breaks backwards compatibility!

    2. Cancellation to the program in main binary - when system interrupts the program in any way unfinished download should be removed from the system

    Signed-off-by: Dusan Malusev [email protected]

  • Set default outfile by path

    Set default outfile by path

    Hello, I wanted to ask whether setting a default download path was a wanted feature. so the out flag is optional.

    For example when downloading a list of files (another feature perhaps?) it can be tedious to always provide the outfile. sure, its possible using xargs and some replacements but is that how it should be?

    so I'd like to suggest the following:

    If the outpath is undefined the filepath is parsed from the URL, or if empty replaced by index. Meaning:

    http://example.com/some/path/video.mp4?hash=deadbeef&expires=123456789 -> video.mp4
    http://example.com/some/path/video.mp4 -> video.mp4
    http://example.com/ -> index
    http://example.com/index.html -> index.html
    http://example.com/?page=about -> index // to keep it simple
    http://example.com/about.php?session=asdf -> about.php
    

    I would implement this if it is a wanted feature.

  • Optimizations and refactoring

    Optimizations and refactoring

    Hi! Loved the idea of this tool, so I decided to contribute some improvements:

    • Some simple refactoring
    • Fixed bug where content-disposition name wouldn't actually be used for d.name (since d.name was set only once, then even if Info returned a valid name, it wouldn't be used in the resulting filepath)
    • Removed usage of redundant HEAD request to determine range support, now only GET is used since its more reliable and makes the code simpler
    • Optimized the concurrent file writing by a lot, now all goroutines write to a single file concurrently using WriteAt (which is documented to be concurrent), so no temporary files are used and no merge is needed, again simplifying the code

    Not sure why, but the test workflows on go 1.14 windows are sometimes not passing (even though they are marked as ok, some unrelated errors are thrown by go vet, which makes the github CI workflow get marked as failed)

    Didn't measure the optimizations on a server with good internet, but my local testing seems to save around 3+ seconds each time since we avoid file copying

  • Issue while retrieving filesize

    Issue while retrieving filesize

    Sometimes (not always, not safely reproducible) I get unrealistic filesizes (see screenshot)

    20201202_10h56m36s_grim

    This happens from time to time on URLs where it works on other times (this one was with a github repo download about 10 MiB in size)

  • panic: slice bounds out of range

    panic: slice bounds out of range

    Hi! I've tried to install got from the AUR and I received this error:

    panic: runtime error: slice bounds out of range [:7] with length 4
    
    goroutine 1 [running]:
    main.main()
    	/home/mohamed/work/dev/go/src/opensource/got/cmd/got/main.go:43 +0x583
    
  • Corrupt files

    Corrupt files

    Hi!

    The tools is really fast! :smiley: But it seems to produce corrupt files. E.g.

    got --out job_jobse..mp4 https://arteconcert-a.akamaihd.net/am/concert/096000/096900/096905-054-A_SQ_0_VO_05149030_MP4-2200_AMM-CONCERT-NEXT_1NdTQsPyN0.mp4
    

    The download itself worked without issues. If I play the downloaded file with mpv I get this:

    mpv --no-video job_jobse.mp4 
         Video --vid=1 (*) (h264 1280x720 25.000fps)
     (+) Audio --aid=1 (*) (aac 2ch 48000Hz)
    AO: [pulse] 48000Hz stereo 2ch float
    A: 00:11:55 / 00:59:39 (19%)
    [ffmpeg/audio] aac: channel element 3.8 is not allocated
    Error decoding audio.
    [ffmpeg/audio] aac: Reserved bit set.
    [ffmpeg/audio] aac: Number of bands (32) exceeds limit (20).
    Error decoding audio.
    [ffmpeg/audio] aac: Multiple frames in a packet.
    [ffmpeg/audio] aac: Input buffer exhausted before END element found
    Error decoding audio.
    [ffmpeg/audio] aac: Sample rate index in program config element does not match the sample rate index configured by the container.
    [ffmpeg/audio] aac: Inconsistent channel configuration.
    [ffmpeg/audio] aac: get_buffer() failed
    Error decoding audio.
    [ffmpeg/audio] aac: Input buffer exhausted before END element found
    Error decoding audio.
    [ffmpeg/audio] aac: Prediction is not allowed in AAC-LC.
    Error decoding audio.
    [ffmpeg/audio] aac: Sample rate index in program config element does not match the sample rate index configured by the container.
    [ffmpeg/audio] aac: Too large remapped id is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
    [ffmpeg/audio] aac: If you want to help, upload a sample of this file to https://streams.videolan.org/upload/ and contact the ffmpeg-devel mailing list. ([email protected])
    ...
    

    So it plays without issues until 11:55 and then I get lots of errors. Downloading the same file with wget everything works as expected.

    Could it be that there are race conditions in the tool that causes the chunks to be assembled in the wrong order or something like that? I suspect if you do the same download now that it might work for you because you didn't trigger the race condition. But that's just guessing of course.

  • build(deps): bump github.com/urfave/cli/v2 from 2.3.0 to 2.5.0

    build(deps): bump github.com/urfave/cli/v2 from 2.3.0 to 2.5.0

    Bumps github.com/urfave/cli/v2 from 2.3.0 to 2.5.0.

    Release notes

    Sourced from github.com/urfave/cli/v2's releases.

    v2.5.0

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.4.10...v2.5.0

    v2.4.10

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.4.9...v2.4.10

    v2.4.9

    What's Changed

    New Contributors

    Full Changelog: https://github.com/urfave/cli/compare/v2.4.8...v2.4.9

    v2.4.8

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.4.7...v2.4.8

    v2.4.7

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.4.6...v2.4.7

    v2.4.6

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.4.5...v2.4.6

    Release 2.4.5

    What's Changed

    ... (truncated)

    Commits
    • 77fb75a Merge pull request #1375 from kolyshkin/no-docs
    • e20d3d4 Merge branch 'main' into no-docs
    • 924052a Merge pull request #1346 from jolheiser/hidden-flag
    • e275e95 Merge pull request #1376 from urfave/duration-default-regression
    • cdb1730 Drop extra if condition
    • 8fe4d79 Merge branch 'main' into duration-default-regression
    • ac641ff Add more test coverage around unset input source applying
    • dbeef68 Merge pull request #1374 from 53jk1/main
    • fe1468c Make the altsrc input source context isSet method private
    • efe0449 Only apply altsrc input source values when set
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Error 403 when downloading from GitHub Releases

    Error 403 when downloading from GitHub Releases

    I tried to download the binary from GitHub using got: got --out got.tar.gz https://github.com/melbahja/got/releases/download/v0.1.1/got_0.1.1_Linux_amd64.tar.gz

    But instead I got Response status code is not ok: 403.

    After a little search I found this issue https://github.com/cavaliercoder/grab/issues/43.

    Basically AWS returns 403 to HEAD requests, changing the HEAD request to a GET at https://github.com/melbahja/got/blob/9098e5bee46ab083f6540eefeee23992fff91364/got.go#L275 worked but I am not sure if that's a good solution.

  • build(deps): bump github.com/urfave/cli/v2 from 2.11.1 to 2.16.3

    build(deps): bump github.com/urfave/cli/v2 from 2.11.1 to 2.16.3

    Bumps github.com/urfave/cli/v2 from 2.11.1 to 2.16.3.

    Release notes

    Sourced from github.com/urfave/cli/v2's releases.

    v2.16.3

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.16.2...v2.16.3

    v2.16.2

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.16.1...v2.16.2

    v2.16.1

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.16.0...v2.16.1

    v2.16.0

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.15.0...v2.16.0

    v2.15.0

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.14.2...v2.15.0

    v2.14.2

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.14.1...v2.14.2

    v2.14.1

    What's Changed

    New Contributors

    ... (truncated)

    Commits
    • 69f4122 Merge pull request #1490 from urfave/maint-build-cleanups
    • a425337 Use correct env var for global flags
    • 7d9264a Replace a few more custom make targets
    • 1a851c7 Only run make v2diff on go 1.19.x + ubuntu-latest
    • da7efeb Use windows compatible path append
    • ff1138c Run make target after the Makefile is available
    • 12a3c62 Move more functionality into internal/build/build.go
    • 375e5df Merge pull request #1489 from dearchap/fix_help_name_consistency
    • 8339b59 Fix: Help name consistency among app/commands and subcommands
    • 8dba5c3 Merge pull request #1488 from dearchap/no_dest_ptr
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/urfave/cli/v2 from 2.11.1 to 2.16.2

    build(deps): bump github.com/urfave/cli/v2 from 2.11.1 to 2.16.2

    Bumps github.com/urfave/cli/v2 from 2.11.1 to 2.16.2.

    Release notes

    Sourced from github.com/urfave/cli/v2's releases.

    v2.16.2

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.16.1...v2.16.2

    v2.16.1

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.16.0...v2.16.1

    v2.16.0

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.15.0...v2.16.0

    v2.15.0

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.14.2...v2.15.0

    v2.14.2

    What's Changed

    Full Changelog: https://github.com/urfave/cli/compare/v2.14.1...v2.14.2

    v2.14.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/urfave/cli/compare/v2.14.0...v2.14.1

    v2.14.0

    What's Changed

    ... (truncated)

    Commits
    • 375e5df Merge pull request #1489 from dearchap/fix_help_name_consistency
    • 8339b59 Fix: Help name consistency among app/commands and subcommands
    • 8dba5c3 Merge pull request #1488 from dearchap/no_dest_ptr
    • 15491d6 Fix: dont generate pointer for dest for Generic flag
    • 6124f3a Merge pull request #1486 from urfave/codecov-threshold-tweaks
    • ee4ff8f Set codecov status thresholds to 5%
    • d62ac9c Merge pull request #1378 from dearchap/issue_1334
    • d0fff2e Add additional test to fix codecov
    • b087856 Add additional test to fix codecov
    • 4f9b8e4 Add coverage threshold
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • download file content is not valid if use ChunkSize  is bigger than the file content size

    download file content is not valid if use ChunkSize is bigger than the file content size

    I use --chunk 5242880 to specify ChunkSize.
    If the size of the target file is less then 5M, the content downloaded is not valid. Its sha256 is not right. I check the source code, I find it has a bug. When d.info.Size is less than d.ChunkSize, then chunksLen is zero.

    I fix it in my fork https://github.com/simonwu-os/got. It works fine.

    chunksLen := d.info.Size / d.ChunkSize ///added by simon wu ///fix if chunksLen = 0, then the result file content is not valid. if chunksLen == 0 { chunksLen += 1 } ///end of added

  • About file size

    About file size

    Hi, thanks for your great project, it is really great !!

    But I met a problem when using your tool to download ImageNet-21k(https://image-net.org/data/winter21_whole.tar.gz). It is a single file and its size is about 1.2T.

    After downoding 411GB of the file, it stucks with erorr saying "file too large". Could you please tell me how to avoid the mistake?

    Thank you very much!

  • stream file to stdout

    stream file to stdout

    I would like to stream the output so I can pipe to tar.

    e.g. curl -s "url" | tar -xz -C /tmp

    Could we have an option to stream to stdout like: got -o - | tar -xz -C /tmp

  • Darwin Build issue: go:linkname must refer to declared function or variable [solved]

    Darwin Build issue: go:linkname must refer to declared function or variable [solved]

    Hi, the latest version didn't build with the following error

    
    user@host got % go build ./...
    # golang.org/x/sys/unix
    ../../go/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:28:3: //go:linkname must refer to declared function or variable
    

    Original(?)/related issue refers potential solution:

    https://github.com/golang/go/issues/51706#issuecomment-1074480464

  • Stuck at 99.34%

    Stuck at 99.34%

    Hi, I get the following

    got -c 128 https://datashare.ed.ac.uk/download/DS_10283_3443.zip
      99.34% ▕████████████████████████▉▏ 12 GB/12 GB @ 0 B/s
    

    I'm using a VM with 8 vCPUs, so it's 16 threads per core. It downloaded @40-90MB/s at the beginning and then once it reached 99.45% it slows down to 0 B/s. What's going on?

Go-file-downloader-ftctl - A file downloader cli built using golang. Makes use of cobra for building the cli and go concurrent feature to download files.

ftctl This is a file downloader cli written in Golang which uses the concurrent feature of go to download files. The cli is built using cobra. How to

Jan 2, 2022
lls is lightweight ls. Using lls, you can get a list of files in a directory that contains a large number of files.

lls lls is lightweight ls. Using lls, you can get a list of files in a directory that contains a large number of files. How? You allocate a buffer for

Dec 29, 2022
zipspy - a CLI tool to extract files from zip archives in S3 without needing to download the entire archive

Zipspy allows you interact with ZIP archives stored in remote locations without requiring a local copy. For example, you can list the filenames in an S3 ZIP archive, download a subset of files, search and retrieve files with regular expressions, and more!

Feb 19, 2022
Command-line tool to organize large directories of media files recursively by date, detecting duplicates.

go-media-organizer Command-line tool written in Go to organise all media files in a directory recursively by date, detecting duplicates.

Jan 6, 2022
A golang CLI tool to download malware from a variety of sources.

mlget _____ _____ _____ _____ _____ /\ \

Jan 2, 2023
Related is a simple cli utility tool to create files or a group of files.

Related - Create files based on individual definitions or groups Related helps with common file-creation-based tasks. You can predefine single types a

Apr 16, 2022
convert curl commands to Python, JavaScript, Go, PHP, R, Dart, Java, MATLAB, Rust, Elixir and more
convert curl commands to Python, JavaScript, Go, PHP, R, Dart, Java, MATLAB, Rust, Elixir and more

curlconverter curlconverter transpiles curl commands into programs in other programming languages. $ curlconverter --data "Hello, world!" example.com

Jan 2, 2023
This is the tool to download files from qiniu cruster manually.

This is the tool to download files from qiniu cruster manually. toCheck = []string{ sealPath, filepath.Join(cachePath, "p_aux"), filepath.Join(cachePa

Nov 25, 2021
The power of curl, the ease of use of httpie.
The power of curl, the ease of use of httpie.

Curlie If you like the interface of HTTPie but miss the features of curl, curlie is what you are searching for. Curlie is a frontend to curl that adds

Dec 27, 2022
CLI tool to upload object to s3-compatible storage backend and set download policy for it.
CLI tool to upload object to s3-compatible storage backend and set download policy for it.

typora-s3 CLI tool to upload object to s3-compatible storage backend and set download policy for it. Build $ git clone https://github.com/fengxsong/ty

Dec 29, 2021
Downloader written in golang to download the public data files from RUC Paraguay.

rucpy-downloader Downloader written in golang to download the public data files(RUC Paraguay) from set.gov.py. The downloader will download the public

Dec 6, 2021
Cleo CLI - do annoying stuff faster

Cleo CLI Installing Heroku CLI Most of Heroku functionality relies on Heroku CLI being present in your system. Go ahead and install it if you haven't

Dec 20, 2021
tinygo-used-files is a CLI tool that lists only the files to be built as specified by buildtag.

tinygo-used-files is a CLI tool that lists only the files to be built as specified by buildtag.

Feb 6, 2022
tmux-wormhole - download files and directories with tmux!
tmux-wormhole - download files and directories with tmux!

tmux-wormhole Use tmux and magic wormhole to get things from your remote computer to your tmux. If tmux has DISPLAY set, open the file locally! Demo U

Nov 9, 2022
Softsuite - Start from gofiber boilerplate and plan to build large projects

Softsuite Thanks to Cozy (ItsCosmas) to build gofiber boilerplate. I start learn

Apr 25, 2022
📥 Command-line tool to download videos from hanime.tv

hanime Command-line tool to download videos from hanime.tv Requirements Installation Install via go get Install from source Install from release Usage

Dec 18, 2022
Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Jan 12, 2022
A small CLI tool to compress and decompress files using Golang
A small CLI tool to compress and decompress files using Golang

Goflate A simple & small CLI tool to compress and decompress files using Golang Usage Install the binary to your local machine with the below command

May 27, 2022