| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | package loaderimport (	"errors")var (	ErrConfigIDKeyNotFound = errors.New("Config ID key is not found.")	ErrConfigIDExists      = errors.New("Config ID already exists.")	ErrUnknownConfigID     = errors.New("Unknown config ID."))type ConfigCreator func() interface{}type ConfigLoader interface {	RegisterCreator(string, ConfigCreator) error	CreateConfig(string) (interface{}, error)	Load([]byte) (interface{}, error)	LoadWithID([]byte, string) (interface{}, error)}type BaseConfigLoader struct {	creators map[string]ConfigCreator}func NewBaseConfigLoader() *BaseConfigLoader {	return &BaseConfigLoader{		creators: make(map[string]ConfigCreator),	}}func (this *BaseConfigLoader) RegisterCreator(id string, creator ConfigCreator) error {	if _, found := this.creators[id]; found {		return ErrConfigIDExists	}	this.creators[id] = creator	return nil}func (this *BaseConfigLoader) CreateConfig(id string) (interface{}, error) {	creator, found := this.creators[id]	if !found {		return nil, ErrUnknownConfigID	}	return creator(), nil}
 |