Na przykład:Jak wygenerować numer skrótu łańcucha w Go?
hash("HelloWorld") = 1234567
Czy istnieje funkcja wbudowana mógłby to zrobić?
Dzięki.
Na przykład:Jak wygenerować numer skrótu łańcucha w Go?
hash("HelloWorld") = 1234567
Czy istnieje funkcja wbudowana mógłby to zrobić?
Dzięki.
Do tego pomocny jest pakiet hash. Zauważ, że jest to abstrakcja w stosunku do konkretnych implementacji skrótów. Niektóre gotowe produkty znajdują się w pakiecie subdirectories.
Przykład:
package main
import (
"fmt"
"hash/fnv"
)
func hash(s string) uint32 {
h := fnv.New32a()
h.Write([]byte(s))
return h.Sum32()
}
func main() {
fmt.Println(hash("HelloWorld"))
fmt.Println(hash("HelloWorld."))
}
(także here)
wyjściowa:
926844193
107706013
Możliwe jest również użycie pojedynczej instancji i 'Write' /' Reset' zamiast tworzenia 'New32a' za każdym razem. Nie wiem, ile to kosztuje. Na przykład: https://play.golang.org/p/aUeNBo755g –
Oto funkcja można użyć do generowania numeru skrótu:
// FNV32a hashes using fnv32a algorithm
func FNV32a(text string) uint32 {
algorithm := fnv.New32a()
algorithm.Write([]byte(text))
return algorithm.Sum32()
}
Stworzyłam grupę tych funkcji użytkowych hash tutaj: https://github.com/shomali11/util
Znajdziesz FNV32
, FNV32a
, FNV64
, FNV65a
, MD5
, SHA1
, SHA256
i SHA512
Not Go specyficzny, ale ciekawe i związane z: http://stackoverflow.com/a/107657/532430 – thwd
, który jest znany jako prehash, teoretycznie. – Roylee