Documentation
¶
Overview ¶
Package structhash creates hash strings from arbitrary go data structures.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Dump ¶
Dump takes a data structure and returns its byte representation. This can be useful if you need to use your own hashing function or formatter.
Example ¶
type Person struct {
Name string
Age int
Emails []string
Extra map[string]string
Spouse *Person
}
bill := &Person{
Name: "Bill",
Age: 24,
Emails: []string{"bob@foo.org", "bob@bar.org"},
Extra: map[string]string{
"facebook": "Bob42",
},
}
bob := &Person{
Name: "Bob",
Age: 42,
Emails: []string{"bob@foo.org", "bob@bar.org"},
Extra: map[string]string{
"facebook": "Bob42",
},
Spouse: bill,
}
fmt.Printf("md5: %x\n", md5.Sum(Dump(bob, 1)))
fmt.Printf("sha1: %x\n", sha1.Sum(Dump(bob, 1)))
Output: md5: 6a50d73f3bd0b9ebd001a0b610f387f0 sha1: c45f097a37366eaaf6ffbc7357c2272cd8fb64f6
func Hash ¶
Hash takes a data structure and returns a hash string of that data structure at the version asked.
This function uses md5 hashing function and default formatter. See also Dump() function.
Example ¶
type Person struct {
Name string
Age int
Emails []string
Extra map[string]string
Spouse *Person
}
bill := &Person{
Name: "Bill",
Age: 24,
Emails: []string{"bob@foo.org", "bob@bar.org"},
Extra: map[string]string{
"facebook": "Bob42",
},
}
bob := &Person{
Name: "Bob",
Age: 42,
Emails: []string{"bob@foo.org", "bob@bar.org"},
Extra: map[string]string{
"facebook": "Bob42",
},
Spouse: bill,
}
hash, err := Hash(bob, 1)
if err != nil {
panic(err)
}
fmt.Printf("%s", hash)
Output: v1_6a50d73f3bd0b9ebd001a0b610f387f0
Example (Tags) ¶
type Person struct {
Ignored string `hash:"-"`
NewName string `hash:"name:OldName version:1"`
Age int `hash:"version:1"`
Emails []string `hash:"version:1"`
Extra map[string]string `hash:"version:1 lastversion:2"`
Spouse *Person `hash:"version:2"`
}
bill := &Person{
NewName: "Bill",
Age: 24,
Emails: []string{"bob@foo.org", "bob@bar.org"},
Extra: map[string]string{
"facebook": "Bob42",
},
}
bob := &Person{
NewName: "Bob",
Age: 42,
Emails: []string{"bob@foo.org", "bob@bar.org"},
Extra: map[string]string{
"facebook": "Bob42",
},
Spouse: bill,
}
hashV1, err := Hash(bob, 1)
if err != nil {
panic(err)
}
hashV2, err := Hash(bob, 2)
if err != nil {
panic(err)
}
hashV3, err := Hash(bob, 3)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", hashV1)
fmt.Printf("%s\n", hashV2)
fmt.Printf("%s\n", hashV3)
Output: v1_45d8a54c5f5fd287f197b26d128882cd v2_babd7618f29036f5564816bee6c8a037 v3_012b06239f942549772c9139d66c121e
func Md5 ¶
Md5 takes a data structure and returns its md5 hash. This is a shorthand for md5.Sum(Dump(c, version)).
func Sha1 ¶
Sha1 takes a data structure and returns its sha1 hash. This is a shorthand for sha1.Sum(Dump(c, version)).
func Version ¶
Version returns the version of the supplied hash as an integer or -1 on failure
Example ¶
// A hash string gotten from Hash(). Returns the version as an int.
i := Version("v1_55743877f3ffd5fc834e97bc43a6e7bd")
fmt.Printf("%d", i)
Output: 1
Example (Errors) ¶
// A hash string gotten from Hash(). Returns -1 on error.
i := Version("va_55743877f3ffd5fc834e97bc43a6e7bd")
fmt.Printf("%d", i)
Output: -1
Types ¶
This section is empty.