endpoint - ActiveState ActiveGo 1.8

Package endpoint

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

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.



package endpoint_test

import (


func ExampleChain() {
    e := endpoint.Chain(

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

    // 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