Categorygithub.com/maple-tech/go-hashify
repositorypackage
0.0.0-20190813022824-dec87041b96c
Repository: https://github.com/maple-tech/go-hashify.git
Documentation: pkg.go.dev

# README

go-hashify

Generates hashes from given arbitrary structs for checksum or other identification purposes.

Usage

To generate a hash, a couple different functions are provided, they all mostly do the same thing. At the moment, the crypto/SHA1 and crypto/MD5 hashes are available, but you can use your own if it implements hash.Hash.

To generate a basic hexidecimal string of a SHA1 hashed struct:

type SomeStruct struct {
    Str string
    Num int64
    Map map[string]float32
    NotHashed bool `hash:"-"`      //<- Not included for hashing
    Renamed bool `hash:"original"` //<- For backwards compat with other structs
}
val := SomeStruct{ ... }
hash, err := hashify.SHA1String(val)
fmt.Println(hash)

To customize the way an object get's hashed, you can implement the hashify.Hashable interface by providing the func Hash(io.Writer)error method. From here you can write any byte representation needed for the hasher.

Note, with reflection only exported fields using the interface will be written.

type Custom struct {
	Str string
}

func (c Custom) Hash(w io.Writer) error {
	w.Write([]byte(strings.ToUpper(c.Str)))
	return nil
}