fasthash

Go package porting the standard hashing algorithms to a more efficient implementation.

Github星跟蹤圖

fasthash CircleCI Go Report Card GoDoc

Go package porting the standard hashing algorithms to a more efficient implementation.

Motivations

Go has great support for hashing algorithms in the standard library, but the
APIs are all exposed as interfaces, which means passing strings or byte slices
to those require dynamic memory allocations. Hashing a string typically requires
2 allocations, one for the Hash value, and one to covert the string to a byte
slice.

This package attempts to solve this issue by exposing functions that implement
string hashing algorithms and don't require dynamic memory alloations.

Testing

To ensure consistency between the fasthash package and the standard library,
all tests must be implemented to run against the standard hash functions and
validate that both packages produced the same results.

Benchmarks

The implementations also have to prove that they are more efficient in terms of
CPU and memory usage than the functions found in the standard library.
Here's an example with fnv-1a:

BenchmarkHash64/standard_hash_function 20000000   105.0 ns/op   342.31 MB/s   56 B/op   2 allocs/op
BenchmarkHash64/hash_function          50000000    38.6 ns/op   932.35 MB/s    0 B/op   0 allocs/op

Usage Example: FNV-1a

package main

import (
    "fmt"

    "github.com/segmentio/fasthash/fnv1a"
)

func main() {
    // Hash a single string.
    h1 := fnv1a.HashString64("Hello World!")
    fmt.Println("FNV-1a hash of 'Hello World!':", h1)

    // Incrementally compute a hash value from a sequence of strings.
    h2 := fnv1a.Init64
    h2 = fnv1a.AddString64(h2, "A")
    h2 = fnv1a.AddString64(h2, "B")
    h2 = fnv1a.AddString64(h2, "C")
    fmt.Println("FNV-1a hash of 'ABC':", h2)
}

主要指標

概覽
名稱與所有者segmentio/fasthash
主編程語言Go
編程語言Go (語言數: 1)
平台
許可證MIT License
所有者活动
創建於2017-06-12 23:13:15
推送於2024-07-04 03:00:01
最后一次提交2023-07-03 15:06:35
發布數4
最新版本名稱v1.0.3 (發布於 )
第一版名稱v1.0.0 (發布於 )
用户参与
星數293
關注者數4
派生數21
提交數34
已啟用問題?
問題數4
打開的問題數1
拉請求數8
打開的拉請求數2
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?