
This information is meta-data on the file that should be loaded / provided // You can also provide your own implementation of the FileSummary interface InputFile := bytes.NewReader(localVersionAsBytes)

EasyĪ new high-level interface designed to reduce the work of implementing block transfer in your application: fs := &BasicSummaryĪll functionality is based on interfaces, allowing customization of behavior: // Here, the input version is a local string Works on Windows and Linux, without cygwin or fuss. Using the concurrency and performance features of Golang, Go-sync is designed to take advantage of multiple processors and multiple HTTP connections to make the most of modern hardware and minimize the impact of the bandwidth latency product. Gosync is a library inspired by zsync and rsync. By doing this, we significantly decreased the required storage (new files were only required when they changed), allowed multiple versions to sit efficiently side by side and very simple file serving to be used efficiently (with a tiny library to resolve and fetch files).
GOSYNC FULL
On a project I worked on, we switched instead to storing individual files that were part of a larger build (like an ISO) by filename and hashes, mainly maintaining an index of which files comprised the full build.

There are some other issues too - ZSync doesn't (as far as I'm aware) solve any issues to do with storage of a files, which can get more and more onerous for large files that are not changing much from one version to another. Using HTTP 1.0 and fully completed GET requests would be better, if possible. When issues happen, they're very difficult to respond to correctly in software (if possible at all).

The ZSync mechanism has the weakness that HTTP1.1 ranged requests are not always well supported by CDN providers and ISP proxies. In order to split issues between the library and the CLI tool, as well as correctly vendor dependencies, the command-line tool code has been moved to its own repository: Why not use a Zsync mechanism?Ĭonsider if a binary differential sync mechanism is appropriate to your use case:
