db.v3: upper.io/db.v3/internal/cache/hashstructure Index | Files

package hashstructure

import "upper.io/db.v3/internal/cache/hashstructure"


Package Files

hashstructure.go include.go

func Hash Uses

func Hash(v interface{}, opts *HashOptions) (uint64, error)

Hash returns the hash value of an arbitrary value.

If opts is nil, then default options will be used. See HashOptions for the default values.

Notes on the value:

* Unexported fields on structs are ignored and do not affect the
  hash value.

* Adding an exported field to a struct with the zero value will change
  the hash value.

For structs, the hashing can be controlled using tags. For example:

struct {
    Name string
    UUID string `hash:"ignore"`

The available tag values are:

* "ignore" - The field will be ignored and not affect the hash code.

* "set" - The field will be treated as a set, where ordering doesn't
          affect the hash code. This only works for slices.

type HashOptions Uses

type HashOptions struct {
    // Hasher is the hash function to use. If this isn't set, it will
    // default to FNV.
    Hasher hash.Hash64

    // TagName is the struct tag to look at when hashing the structure.
    // By default this is "hash".
    TagName string

HashOptions are options that are available for hashing.

type Includable Uses

type Includable interface {
    HashInclude(field string, v interface{}) (bool, error)

Includable is an interface that can optionally be implemented by a struct. It will be called for each field in the struct to check whether it should be included in the hash.

type IncludableMap Uses

type IncludableMap interface {
    HashIncludeMap(field string, k, v interface{}) (bool, error)

IncludableMap is an interface that can optionally be implemented by a struct. It will be called when a map-type field is found to ask the struct if the map item should be included in the hash.

Package hashstructure imports 5 packages (graph) and is imported by 1 packages. Updated 2019-01-05. Refresh now. Tools for package owners.