gotosocial/vendor/codeberg.org/gruf/go-kv
kim e3dfd88893 [performance] bump codeberg.org/gruf/go-kv to v2 (#4341)
updates our codeberg.org/gruf/go-kv log key-value formatting library to latest version, which comes with some maaaaaaajor speed boosts in the form of:
- very minimal reflect.Value{} usage
- caching prepared formatting functions per type

~~still a work-in-progress until i make a release tag on the go-kv repository, which itself is waiting on published benchmark results in the README and finishing writing some code comments~~

benchmarks so far show this to be ~3x faster than the "fmt" stdlib package on average, when run across a wide variety (106 different types) of test cases, while still creating more visually friendly log output and actually recursing down nested struct ptrs

Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4341
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
2025-07-29 09:23:20 +02:00
..
format update gruf / {go-cache, go-maps, go-kv} (#3361) 2024-09-27 10:26:50 +00:00
v2 [performance] bump codeberg.org/gruf/go-kv to v2 (#4341) 2025-07-29 09:23:20 +02:00
field.go [chore]: Bump codeberg.org/gruf/go-kv from 1.6.0 to 1.6.1 (#1619) 2023-03-13 07:52:13 +00:00
field_fmt.go [chore]: Bump codeberg.org/gruf/go-kv from 1.6.0 to 1.6.1 (#1619) 2023-03-13 07:52:13 +00:00
field_format.go [chore]: Bump codeberg.org/gruf/go-kv from 1.6.0 to 1.6.1 (#1619) 2023-03-13 07:52:13 +00:00
LICENSE [chore] use our own logging implementation (#716) 2022-07-19 10:47:55 +02:00
README.md [bugfix] bump go-kv version with logfmt quote fix (#2108) 2023-08-13 14:27:29 +01:00
util.go [chore]: Bump codeberg.org/gruf/go-kv from 1.6.3 to 1.6.4 (#2142) 2023-08-21 06:54:30 +00:00

go-kv

This library provides a key-value field structure kv.Field{} that plays well with the "fmt" package. It gives an easy means of appending key-value fields to log entries, in a manner that also happens to look nice! (it's not far removed from using a map[string]interface{}).

The formatting for these key-value fields is handled by the "fmt" package by default. If you set the kvformat build tag then it will use a custom formatting library found under format/. You can see the benchmarks for both below.

benchmarks:

grufwub @ ~/Projects/main/go-kv
--> go test -run=none -benchmem -bench=.*
goos: linux
goarch: amd64
pkg: codeberg.org/gruf/go-kv
cpu: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
BenchmarkFieldAppendMulti-8       125241              9389 ns/op             849 B/op         98 allocs/op
BenchmarkFieldStringMulti-8       113227             10444 ns/op            3029 B/op        120 allocs/op
BenchmarkFieldFprintfMulti-8      147915              7448 ns/op            1121 B/op        115 allocs/op
BenchmarkFieldsAppend-8           189126              6255 ns/op             849 B/op         98 allocs/op
BenchmarkFieldsString-8           166219              6517 ns/op            3798 B/op        100 allocs/op
PASS
ok      codeberg.org/gruf/go-kv 6.169s

grufwub @ ~/Projects/main/go-kv
--> go test -run=none -benchmem -bench=.* -tags=kvformat                                                                                                                                                                                       
goos: linux
goarch: amd64
pkg: codeberg.org/gruf/go-kv
cpu: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
BenchmarkFieldAppendMulti-8       190161              5709 ns/op             592 B/op         56 allocs/op
BenchmarkFieldStringMulti-8       161763              7930 ns/op            3240 B/op         95 allocs/op
BenchmarkFieldFprintfMulti-8      181557              6207 ns/op            1120 B/op        115 allocs/op
BenchmarkFieldsAppend-8           247052              4580 ns/op             592 B/op         56 allocs/op
BenchmarkFieldsString-8           231235              5103 ns/op            1768 B/op         58 allocs/op
PASS
ok      codeberg.org/gruf/go-kv 6.134s