goctx

package module
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 24, 2020 License: MIT Imports: 6 Imported by: 0

README

Go Report Card PkgGoDev 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-8 35313684 34.2 ns/op
BenchmarkValue/5/non_parallel/goctx-8 42801348 30.0 ns/op
BenchmarkValue/5/non_parallel/pure_map-8 16655377 72.8 ns/op
BenchmarkValue/5/parallel/std-8 168420460 7.09 ns/op
BenchmarkValue/5/parallel/goctx-8 185695462 6.35 ns/op
BenchmarkValue/5/parallel/pure_map-8 67944997 17.6 ns/op

With 20 context.WithXXX calls

BenchmarkValue/20/non_parallel/std-8 7137338 168 ns/op
BenchmarkValue/20/non_parallel/goctx-8 14623730 81.4 ns/op
BenchmarkValue/20/non_parallel/pure_map-8 5282458 235 ns/op
BenchmarkValue/20/parallel/std-8 42826857 27.9 ns/op
BenchmarkValue/20/parallel/goctx-8 79149823 15.1 ns/op
BenchmarkValue/20/parallel/pure_map-8 22206717 53.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)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterValueFunc

func RegisterValueFunc(ctx context.Context, f ValueFunc)

RegisterValueFunc registers a value function

func Value

func Value(ctx context.Context, key interface{}) (v interface{})

Value can replace the `context.Context.Value` call

Types

type ValueFunc

type ValueFunc func(ctx context.Context, key interface{}) (value interface{}, parent context.Context)

ValueFunc takes a context and a key, returns the value and the parent of the context (if exists)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL