Documentation ¶
Overview ¶
Package ctxtool provides extra functionality and tools for use with context.Context.
Index ¶
- func FromCanceller(c canceller) context.Context
- func FromChannel(ch <-chan struct{}) context.Context
- func MergeCancellation(parent, other canceller) (context.Context, context.CancelFunc)
- func MergeContexts(ctx1, ctx2 context.Context) (context.Context, context.CancelFunc)
- func MergeDeadline(ctx context.Context, deadliner deadliner) context.Context
- func MergeValues(ctx context.Context, overwrites valuer) context.Context
- func WithChannel(parent canceller, ch <-chan struct{}) (context.Context, context.CancelFunc)
- func WithFunc(parent canceller, fn func()) (context.Context, context.CancelFunc)
- type AutoCancel
- type CancelContext
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FromCanceller ¶
FromCanceller creates a new context from a canceller. If a value that implements contex.Context is passed, then the value will be returned as is.
func FromChannel ¶
FromChannel creates a new context from a channel.
func MergeCancellation ¶
func MergeCancellation(parent, other canceller) (context.Context, context.CancelFunc)
MergeCancellation creates a new context that will be cancelled if one of the two input contexts gets canceled. The `Values` and `Deadline` are taken from the first context.
func MergeContexts ¶
MergeContexts merges cancellation and values of 2 contexts. The resulting context is canceled by the first context that got canceled. The ctx2 overwrites values in ctx1 during value lookup.
func MergeDeadline ¶
MergeDeadline merges the deadline of two contexts. The resulting context deadline will be the lesser deadline between the two context. If neither context configures a deadline, the original context is returned.
func MergeValues ¶
MergeValues merges the values from ctx and overwrites. Value lookup will occur on `overwrites` first. Deadline and cancellation are still driven by the first context. In order to merge cancellation use MergeCancellation.
func WithChannel ¶
func WithChannel(parent canceller, ch <-chan struct{}) (context.Context, context.CancelFunc)
WithChannel creates a context that is cancelled if the parent context is cancelled or if the given channel is closed.
Types ¶
type AutoCancel ¶
type AutoCancel struct {
// contains filtered or unexported fields
}
AutoCancel collects cancel functions to be executed at the end of the function scope.
Example:
var ac AutoCancel defer ac.Cancel() ctx := ac.With(context.WithCancel(context.Background())) ctx := ac.With(context.WithTimeout(ctx, 5 * time.Second)) ... // do something with ctx
func (*AutoCancel) Add ¶
func (ac *AutoCancel) Add(fn context.CancelFunc)
Add adds a new cancel function to the AutoCancel. The function will be run before any other already registered cancel function.
func (*AutoCancel) Cancel ¶
func (ac *AutoCancel) Cancel()
Cancel calls all registered cancel functions in reverse order.
func (*AutoCancel) With ¶
func (ac *AutoCancel) With(ctx canceller, cancel context.CancelFunc) context.Context
With is used to wrap a Context constructer call that returns a context and a cancel function. The cancel function is automatically added to AutoCancel and the original context is returned as is.
type CancelContext ¶ added in v0.1.0
CancelContext holds a context with its corresponding CancelFunc. The cancel func will be called when calling `Cancel` on `CancelContext`.
Although it is discouraged to store context.Context in structs, sometimes it might be necessary to do so, because the cancellation needs to be called asynchronously, or an interface with a Stop method is required (context.Context is not part of the public API). One might still want to use a `context.Context` for shutdown handling and propagation in that case.
func WithCancelContext ¶ added in v0.1.0
func WithCancelContext(parent context.Context) CancelContext
WithCancelContext creates a new CancelContext similar to `context.WithCancel`. The `(CancelContext).Cancel()` method must be called in order to clean up associated resources.
func WrapCancel ¶ added in v0.1.0
func WrapCancel(parent context.Context, cancel context.CancelFunc) CancelContext
WrapCancel creates a CancelContext from an existing context and the associated cancel function.
Example:
cancelCtx := WrapCancel(context.WithCancel(parent))
func (CancelContext) Cancel ¶ added in v0.1.0
func (c CancelContext) Cancel()
Cancel calls the underlying cancel function, which marks the associated context as cancelled.