Функция fnv.New64a

Функция fnv.New64a создает новый объект для вычисления хеш-суммы по алгоритму FNV-1a с разрядностью 64 бита. В отличие от алгоритма FNV-1, в FNV-1a операция XOR выполняется до умножения на простое число, что делает алгоритм более устойчивым к коллизиям. Функция возвращает интерфейс hash.Hash64, который реализует все методы стандартного интерфейса hash.Hash, а также метод Sum64 для получения хеша в виде uint64.

Синтаксис

gofunc New64a() hash.Hash64

Функция не принимает параметров и возвращает новый объект хеширования, реализующий интерфейс hash.Hash64.

Пример

Давайте вычислим хеш для строки "abcde" с использованием алгоритма FNV-1a 64 бита:

gopackage main

import (
  "fmt"
  "hash/fnv"
)

func main() {
  h := fnv.New64a()
  h.Write([]byte("abcde"))
  res := h.Sum64()
  fmt.Println(res)
}

Результат выполнения кода:

go15817220661460363384

Пример

Давайте вычислим хеш для строки "12345" с помощью метода Sum, который возвращает срез байтов:

gopackage main

import (
  "fmt"
  "hash/fnv"
)

func main() {
  h := fnv.New64a()
  h.Write([]byte("12345"))
  res := h.Sum(nil)
  fmt.Printf("%x\n", res)
}

Результат выполнения кода:

go"f0bf98b2216c1d48"

Пример

Продемонстрируем возможность последовательной записи данных в хеш-объект:

gopackage main

import (
  "fmt"
  "hash/fnv"
)

func main() {
  h := fnv.New64a()
  h.Write([]byte("abc"))
  h.Write([]byte("de"))
  res := h.Sum64()
  fmt.Println(res)
}

Результат выполнения кода:

go15817220661460363384

Обратите внимание, что хеш для последовательной записи "abc" и "de" совпадает с хешем для строки "abcde", так как данные записываются в том же порядке.

Смотрите также

  • функцию fnv.New32,
    которая создает хеш FNV-1 32 бита
  • функцию fnv.New32a,
    которая создает хеш FNV-1a 32 бита
  • функцию fnv.New64,
    которая создает хеш FNV-1 64 бита
  • функцию fnv.New128,
    которая создает хеш FNV-1 128 бит