| 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 []Closable
 
- func NewChainedClosable(c ...Closable) ChainedClosable {
 
- 	return ChainedClosable(c)
 
- }
 
- func (cc ChainedClosable) Close() error {
 
- 	for _, c := range cc {
 
- 		c.Close()
 
- 	}
 
- 	return nil
 
- }
 
 
  |