endpoint - ActiveState ActiveGo 1.8
...

Package endpoint

import "github.com/go-kit/kit/endpoint"
Overview
Index
Examples

Overview ▾

Package endpoint defines an abstraction for RPCs.

Endpoints are a fundamental building block for many Go kit components. Endpoints are implemented by servers, and called by clients.

func Nop

func Nop(context.Context, interface{}) (interface{}, error)

Nop is an endpoint that does nothing and returns a nil error. Useful for tests.

type Endpoint

Endpoint is the fundamental building block of servers and clients. It represents a single RPC method.

type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error)

type Middleware

Middleware is a chainable behavior modifier for endpoints.

type Middleware func(Endpoint) Endpoint

func Chain

func Chain(outer Middleware, others ...Middleware) Middleware

Chain is a helper function for composing middlewares. Requests will traverse them in the order they're declared. That is, the first middleware is treated as the outermost middleware.

Example

Code:

package endpoint_test

import (
    "context"
    "fmt"

    "github.com/go-kit/kit/endpoint"
)

func ExampleChain() {
    e := endpoint.Chain(
        annotate("first"),
        annotate("second"),
        annotate("third"),
    )(myEndpoint)

    if _, err := e(ctx, req); err != nil {
        panic(err)
    }

    // Output:
    // first pre
    // second pre
    // third pre
    // my endpoint!
    // third post
    // second post
    // first post
}

var (
    ctx = context.Background()
    req = struct{}{}
)

func annotate(s string) endpoint.Middleware {
    return func(next endpoint.Endpoint) endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (interface{}, error) {
            fmt.Println(s, "pre")
            defer fmt.Println(s, "post")
            return next(ctx, request)
        }
    }
}

func myEndpoint(context.Context, interface{}) (interface{}, error) {
    fmt.Println("my endpoint!")
    return struct{}{}, nil
}