Skip to content

Deep hashing for Go - able to calculate an fnv hash of nested data structures with exported fields.

License

Notifications You must be signed in to change notification settings

davegardnerisme/deephash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deep hash

Build Status

A library for calculating a deterministic hash for simple or nested data structures in Go. The traversal algorithm is based on mergo, which is in turn based on reflect/deepequal.go from the stdlib.

Example:

eg1 := "foo"
eg2 := example{
	Foo: "foo",
	Bar: 43.0,
}
eg3 := &example{
	Foo: "foo",
	Bar: 43.0,
}

fmt.Printf("String\t%x\n", deephash.Hash(eg1))
fmt.Printf("Struct\t%x\n", deephash.Hash(eg2))
fmt.Printf("Pointer\t%x\n", deephash.Hash(eg3))

Output:

String	dcb27518fed9d577
Struct	e0979b89bf545866
Pointer	e0979b89bf545866

It's worth noting that here two structs with the same content (eg: a copy), where one is a pointer and one isn't, both hash to the same value.

You can run this via:

go run example/example.go

Key features

  • uses fnv 64a hashing algorithm which is fast with good distribution
  • deterministic hashing for maps (which don't have any order) by sorting on the hash of the keys

Docs

http://godoc.org/github.com/davegardnerisme/deephash

About

Deep hashing for Go - able to calculate an fnv hash of nested data structures with exported fields.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages