package client import "sync/atomic" type Connector interface { Connect() (readChan <-chan []byte, writeChan chan<- []byte, err error) Disconnect() error GetName() string Clone() Connector Validate() error } type Connectors struct { Name string `json:"name"` validated atomic.Value } func (c *Connectors) GetName() string { return c.Name } func (c *Connectors) Clone() *Connectors { return &Connectors{ Name: c.Name, validated: c.validated, } } func (c *Connectors) Validate() error { if nil != c.validated.Load() { return nil } c.validated.Store(true) if "" == c.Name { c.Name = "Connector" } return nil }