Spec-Zone.ru › Go

Пакет maphash

  • import "hash/maphash"
  • Обзор
  • Индекс
  • Примеры

Обзор

Пакет maphash предоставляет хеш-функции для последовательностей байтов и сравнимых значений. Эти хеш-функции предназначены для использования в реализациях хеш-таблиц или других структур данных, которые нуждаются в отображении произвольных строк или последовательностей байтов на равномерное распределение по беззнаковым 64-битным целым числам. Каждый экземпляр хеш-таблицы или структуры данных должен использовать свой собственный Seed.

Хеш-функции не являются криптографически защищенными. (См. crypto/sha256 и crypto/sha512 для криптографического использования.)

Пример

Код:

// The zero Hash value is valid and ready to use; setting an
// initial seed is not necessary.
var h maphash.Hash

// Add a string to the hash, and print the current hash value.
h.WriteString("hello, ")
fmt.Printf("%#x\n", h.Sum64())

// Append additional data (in the form of a byte array).
h.Write([]byte{'w', 'o', 'r', 'l', 'd'})
fmt.Printf("%#x\n", h.Sum64())

// Reset discards all data previously added to the Hash, without
// changing its seed.
h.Reset()

// Use SetSeed to create a new Hash h2 which will behave
// identically to h.
var h2 maphash.Hash
h2.SetSeed(h.Seed())

h.WriteString("same")
h2.WriteString("same")
fmt.Printf("%#x == %#x\n", h.Sum64(), h2.Sum64())

Индекс

  • func Bytes(seed Seed, b []byte) uint64
  • func Comparable[T comparable](seed Seed, v T) uint64
  • func String(seed Seed, s string) uint64
  • func WriteComparable[T comparable](h *Hash, x T)
  • тип Hash
  • func (h *Hash) BlockSize() int
  • func (h *Hash) Reset()
  • func (h *Hash) Seed() Seed
  • func (h *Hash) SetSeed(seed Seed)
  • func (h *Hash) Size() int
  • func (h *Hash) Sum(b []byte) []byte
  • func (h *Hash) Sum64() uint64
  • func (h *Hash) Write(b []byte) (int, error)
  • func (h *Hash) WriteByte(b byte) error
  • func (h *Hash) WriteString(s string) (int, error)
  • тип Seed
  • func MakeSeed() Seed

Примеры

Пакет

Файлы пакета

maphash.go maphash_runtime.go

func Bytes 1.19

func Bytes(seed Seed, b []byte) uint64

Bytes возвращает хеш b с заданным seed.

Bytes эквивалентен, но более удобен и эффективен, чем:

var h Hash
h.SetSeed(seed)
h.Write(b)
return h.Sum64()

func Comparable 1.24

func Comparable[T comparable](seed Seed, v T) uint64

Comparable возвращает хеш сравнимого значения v с заданным seed таким образом, что Comparable(s, v1) == Comparable(s, v2), если v1 == v2. Если v != v, то полученный хеш равномерно распределён случайным образом.

func String 1.19

func String(seed Seed, s string) uint64

String возвращает хеш s с заданным seed.

String эквивалентен, но более удобен и эффективен, чем:

var h Hash
h.SetSeed(seed)
h.WriteString(s)
return h.Sum64()

func WriteComparable 1.24

func WriteComparable[T comparable](h *Hash, x T)

WriteComparable добавляет x к данным, хешируемым h.

тип Hash 1.14

Hash вычисляет хеш последовательности байтов с заданным seed.

Нулевой Hash является валидным Hash, готовым к использованию. Нулевой Hash выбирает случайный seed для себя во время первого вызова метода Reset, Write, Seed или Sum64. Для управления seed используйте SetSeed.

Вычисленные хеш-значения зависят только от начального seed и последовательности байтов, предоставленных объекту Hash, а не от способа их предоставления. Например, три последовательности

h.Write([]byte{'f','o','o'})
h.WriteByte('f'); h.WriteByte('o'); h.WriteByte('o')
h.WriteString("foo")

все имеют одинаковый эффект.

Хеши предназначены для устойчивости к коллизиям, даже в ситуациях, когда злоумышленник контролирует последовательности байтов, которые хешируются.

Hash не безопасен для одновременного использования несколькими горутинами, но Seed безопасен. Если несколько горутин должны вычислить один и тот же хеш с заданным seed, каждая может объявить свой собственный Hash и вызвать SetSeed со общим Seed.

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

func (*Hash) BlockSize 1.14

func (h *Hash) BlockSize() int

BlockSize возвращает размер блока h.

func (*Hash) Reset 1.14

func (h *Hash) Reset()

Reset отбрасывает все байты, добавленные к h. (Seed остаётся тем же.)

func (*Hash) Seed 1.14

func (h *Hash) Seed() Seed

Seed возвращает значение seed h.

func (*Hash) SetSeed 1.14

func (h *Hash) SetSeed(seed Seed)

SetSeed устанавливает h для использования seed, который должен был быть возвращён методом MakeSeed или другим методом Hash.Seed. Два объекта Hash с одинаковым seed ведут себя идентично. Два объекта Hash с разными seed, очень вероятно, будут вести себя по-разному. Любые байты, добавленные в h до этого вызова, будут отброшены.

func (*Hash) Size 1.14

func (h *Hash) Size() int

Size возвращает размер значения хеша h, 8 байт.

func (*Hash) Sum 1.14

func (h *Hash) Sum(b []byte) []byte

Sum добавляет текущее 64-битное значение хеша к b. Оно существует для реализации hash.Hash. Для прямых вызовов, использование Hash.Sum64 более эффективно.

func (*Hash) Sum64 1.14

func (h *Hash) Sum64() uint64

Sum64 возвращает текущее 64-битное значение h, которое зависит от seed h и последовательности байтов, добавленных к h с момента последнего вызова Hash.Reset или Hash.SetSeed.

Все биты результата Sum64 приблизительно равномерно и независимо распределены, поэтому его можно безопасно уменьшить, используя побитовые маски, сдвиги или модульную арифметику.

func (*Hash) Write 1.14

func (h *Hash) Write(b []byte) (int, error)

Write добавляет b к последовательности байтов, хешируемых h. Он всегда записывает все b и никогда не терпит неудачу; счёт и результат ошибки предназначены для реализации io.Writer.

func (*Hash) WriteByte 1.14

func (h *Hash) WriteByte(b byte) error

WriteByte добавляет b к последовательности байтов, хешируемых h. Он никогда не терпит неудачу; результат ошибки предназначен для реализации io.ByteWriter.

func (*Hash) WriteString 1.14

func (h *Hash) WriteString(s string) (int, error)

WriteString добавляет байты s к последовательности байтов, хешируемых h. Он всегда записывает все s и никогда не терпит неудачу; счёт и результат ошибки предназначены для реализации io.StringWriter.

тип Seed 1.14

Seed — это случайное значение, которое выбирает конкретную хеш-функцию, вычисляемую объектом Hash. Если два Hash используют одинаковые Seed, они будут вычислять одинаковые хеш-значения для любого заданного входного значения. Если два Hash используют разные Seed, они, скорее всего, будут вычислять различные хеш-значения для любого заданного входного значения.

Seed должен быть инициализирован вызовом MakeSeed. Нулевое значение seed неинициализировано и не является допустимым для использования в методе SetSeed объекта Hash.

Каждое значение Seed локально для одного процесса и не может быть сериализовано или каким-либо образом восстановлено в другом процессе.

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

func MakeSeed 1.14

func MakeSeed() Seed

MakeSeed возвращает новый случайный seed.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/hash/maphash/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API