deephash

package
v1.33.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 7, 2022 License: BSD-3-Clause Imports: 12 Imported by: 0

Documentation

Overview

Package deephash hashes a Go value recursively, in a predictable order, without looping. The hash is only valid within the lifetime of a program. Users should not store the hash on disk or send it over the network. The hash is sufficiently strong and unique such that Hash(x) == Hash(y) is an appropriate replacement for x == y.

The definition of equality is identical to reflect.DeepEqual except:

  • Floating-point values are compared based on the raw bits, which means that NaNs (with the same bit pattern) are treated as equal.
  • Types which implement interface { AppendTo([]byte) []byte } use the AppendTo method to produce a textual representation of the value. Thus, two values are equal if AppendTo produces the same bytes.

WARNING: This package, like most of the tailscale.com Go module, should be considered Tailscale-internal; we make no API promises.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HasherForType

func HasherForType[T any]() func(T) Sum

HasherForType is like Hash, but it returns a Hash func that's specialized for the provided reflect type, avoiding a map lookup per value.

func Update

func Update(last *Sum, v ...any) (changed bool)

Update sets last to the hash of v and reports whether its value changed.

Types

type Sum

type Sum struct {
	// contains filtered or unexported fields
}

Sum is an opaque checksum type that is comparable.

func Hash

func Hash(v any) (s Sum)

Hash returns the hash of v.

func (Sum) String

func (s Sum) String() string

Directories

Path Synopsis
Package testtype contains types for testing deephash.
Package testtype contains types for testing deephash.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL