README

teivah/onecontext

Go Report Card

Overview

Have you ever faced the situation where you have to merge multiple existing contexts? If not, then you might, eventually.

For example, we can face the situation where we are building an application using a library that gives us a global context (for example urfave/cli). This context expires once the application is stopped.

Meanwhile, we are exposing a gRPC service like this:

func (f *Foo) Get(ctx context.Context, bar *Bar) (*Baz, error) {
	
}

Here, we receive another context provided by gRPC.

Then, in the Get implementation, we want for example to query a database and we must provide a context for that.

Ideally, we would like to provide a merged context that would expire either:

  • When the application is stopped
  • Or when the received gRPC context expires

This is exactly the purpose of this library.

In our case, we can now merge the two contexts in a single one like this:

ctx, cancel := onecontext.Merge(ctx1, ctx2)

This returns a merged context that we can now propagate.

Installation

go get github.com/teivah/onecontext

Expand ▾ Collapse ▴

Documentation

Overview

    Package onecontext provides a mechanism to merge multiple existing contexts.

    Index

    Constants

    This section is empty.

    Variables

    This section is empty.

    Functions

    func Merge

      Merge allows to merge multiple contexts. It returns the merged context and a CancelFunc to cancel it.

      Types

      type Canceled

      type Canceled struct {
      }

        Canceled is the error returned when the CancelFunc returned by Merge is called

        func (*Canceled) Error

        func (c *Canceled) Error() string

        Source Files