| 123456789101112131415161718192021222324252627282930313233343536373839404142 | package common// Closable is the interface for objects that can release its resources.type Closable interface {	// Close release all resources used by this object, including goroutines.	Close() error}// Close closes the obj if it is a Closable.func Close(obj interface{}) error {	if c, ok := obj.(Closable); ok {		return c.Close()	}	return nil}// Runnable is the interface for objects that can start to work and stop on demand.type Runnable interface {	// Start starts the runnable object. Upon the method returning nil, the object begins to function properly.	Start() error	Closable}// HasType is the interface for objects that knows its type.type HasType interface {	// Type returns the type of the object.	Type() interface{}}type ChainedClosable []Closablefunc NewChainedClosable(c ...Closable) ChainedClosable {	return ChainedClosable(c)}func (cc ChainedClosable) Close() error {	for _, c := range cc {		c.Close()	}	return nil}
 |