Clone this repo:
  1. 34bb48f Be more specific about supported Go versions by Caleb Spare · 12 days ago master
  2. 997e168 Add note about using Go 1.11+ by Caleb Spare · 3 weeks ago
  3. de209a9 Move benchmarks to their own module by Caleb Spare · 10 weeks ago bench-module v2.1.0
  4. 32f3a10 Remove unnecessary conversions by Caleb Spare · 5 months ago
  5. 3767db7 Run go mod tidy by Caleb Spare · 10 months ago

xxhash

GoDoc Build Status

xxhash is a Go implementation of the 64-bit xxHash algorithm, XXH64. This is a high-quality hashing algorithm that is much faster than anything in the Go standard library.

This package provides a straightforward API:

func Sum64(b []byte) uint64
func Sum64String(s string) uint64
type Digest struct{ ... }
    func New() *Digest

The Digest type implements hash.Hash64. Its key methods are:

func (*Digest) Write([]byte) (int, error)
func (*Digest) WriteString(string) (int, error)
func (*Digest) Sum64() uint64

This implementation provides a fast pure-Go implementation and an even faster assembly implementation for amd64.

Compatibility

This package is in a module and the latest code is in version 2 of the module. You need a version of Go with at least “minimal module compatibility” to use github.com/cespare/xxhash/v2:

  • 1.9.7+ for Go 1.9
  • 1.10.3+ for Go 1.10
  • Go 1.11 or later

I recommend using the latest release of Go.

Benchmarks

Here are some quick benchmarks comparing the pure-Go and assembly implementations of Sum64.

input sizepuregoasm
5 B979.66 MB/s1291.17 MB/s
100 B7475.26 MB/s7973.40 MB/s
4 KB17573.46 MB/s17602.65 MB/s
10 MB17131.46 MB/s17142.16 MB/s

These numbers were generated on Ubuntu 18.04 with an Intel i7-8700K CPU using the following commands under Go 1.11.2:

$ go test -tags purego -benchtime 10s -bench '/xxhash,direct,bytes'
$ go test -benchtime 10s -bench '/xxhash,direct,bytes'

Projects using this package