gotosocial/vendor/codeberg.org/gruf/go-mangler/README.md
kim 51c156cca1
pull in latest go-kv, go-cache (#1530)
Signed-off-by: kim <grufwub@gmail.com>
2023-02-19 10:36:38 +01:00

36 lines
2.1 KiB
Markdown

# go-mangler
[Documentation](https://pkg.go.dev/codeberg.org/gruf/go-mangler).
To put it simply is a bit of an odd library. It aims to provide incredibly fast, unique string outputs for all default supported input data types during a given runtime instance.
It is useful, for example, for use as part of larger abstractions involving hashmaps. That was my particular usecase anyways...
This package does make liberal use of the "unsafe" package.
Benchmarks are below. Those with missing values panicked during our set of benchmarks, usually a case of not handling nil values elegantly. Please note the more important thing to notice here is the relative difference in benchmark scores, the actual `ns/op`,`B/op`,`allocs/op` accounts for running through over 80 possible test cases, including some not-ideal situations.
The choice of libraries in the benchmark are just a selection of libraries that could be used in a similar manner to this one, i.e. serializing in some manner.
```
goos: linux
goarch: amd64
pkg: codeberg.org/gruf/go-mangler
cpu: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
BenchmarkMangle
BenchmarkMangle-8 533011 2003 ns/op 1168 B/op 120 allocs/op
BenchmarkMangleKnown
BenchmarkMangleKnown-8 817060 1458 ns/op 1168 B/op 120 allocs/op
BenchmarkJSON
BenchmarkJSON-8 188637 5899 ns/op 4211 B/op 142 allocs/op
BenchmarkFmt
BenchmarkFmt-8 162735 7053 ns/op 2257 B/op 161 allocs/op
BenchmarkFxmackerCbor
BenchmarkFxmackerCbor-8 362403 3336 ns/op 1496 B/op 122 allocs/op
BenchmarkMitchellhHashStructure
BenchmarkMitchellhHashStructure-8 113982 10079 ns/op 8443 B/op 961 allocs/op
BenchmarkCnfStructhash
BenchmarkCnfStructhash-8 7162 167613 ns/op 288619 B/op 5841 allocs/op
PASS
ok codeberg.org/gruf/go-mangler 11.352s
```