Home

Awesome

Go Report Card PkgGoDev Github Workflow Build Status codecov pre-commit

goctx

Get your context value faster

How to use

Replace

v := ctx.Value(key)

With

v := goctx.Value(ctx, key)

Benchmark

There will be little difference when there is only 1~2 context.WithXXX calls

With 5 context.WithXXX calls

BenchmarkValue/5/non_parallel/std-83531368434.2 ns/op
BenchmarkValue/5/non_parallel/goctx-84280134830.0 ns/op
BenchmarkValue/5/non_parallel/pure_map-81665537772.8 ns/op
BenchmarkValue/5/parallel/std-81684204607.09 ns/op
BenchmarkValue/5/parallel/goctx-81856954626.35 ns/op
BenchmarkValue/5/parallel/pure_map-86794499717.6 ns/op

With 20 context.WithXXX calls

BenchmarkValue/20/non_parallel/std-87137338168 ns/op
BenchmarkValue/20/non_parallel/goctx-81462373081.4 ns/op
BenchmarkValue/20/non_parallel/pure_map-85282458235 ns/op
BenchmarkValue/20/parallel/std-84282685727.9 ns/op
BenchmarkValue/20/parallel/goctx-87914982315.1 ns/op
BenchmarkValue/20/parallel/pure_map-82220671753.8 ns/op

As we can see from the benchmark test, the map implementation is slower than the standard one, so it is not recommended to use RegisterValueFunc to register a context value function, unless you do not want to see nested stack with Value method call (That's also the reason why RegisterValueFunc is kept even it is not fast)