| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | package backendimport (	"context"	"errors")var (	ErrNoType         = errors.New("backend: no type")	ErrNoName         = errors.New("backend: no name")	ErrTypeRegistered = errors.New("backend: already registered"))type InitFunc func(context.Context) (interface{}, error)type Backend struct {	name        string	backendType string	init        InitFunc}var backends = struct {	r []*Backend}{}func Register(name string, backendType string, init InitFunc) {	if name == "" {		panic(ErrNoName)	}	if backendType == "" {		panic(ErrNoType)	}	for _, b := range backends.r {		if b.backendType == backendType {			panic(ErrTypeRegistered)		}	}	backends.r = append(backends.r, &Backend{		name,		backendType,		init,	})}func Get(ctx context.Context, backendType string) (interface{}, error) {	for _, b := range backends.r {		if b.backendType == backendType {			return b.init(ctx)		}	}	return nil, errors.New("not found")}
 |