code: func (c *Client) Start() {
  	if c.LogError == nil {
  		c.LogError = errorLogger
  	}
  	if c.clientStopChan != nil {
  		panic("gorpc.Client: the given client is already started. Call Client.Stop() before calling Client.Start() again!")
  	}
  
  	if c.PendingRequests <= 0 {
  		c.PendingRequests = DefaultPendingMessages
  	}
  	if c.FlushDelay == 0 {
  		c.FlushDelay = DefaultFlushDelay
  	}
  	if c.RequestTimeout <= 0 {
  		c.RequestTimeout = DefaultRequestTimeout
  	}
  	if c.SendBufferSize <= 0 {
  		c.SendBufferSize = DefaultBufferSize
  	}
  	if c.RecvBufferSize <= 0 {
  		c.RecvBufferSize = DefaultBufferSize
  	}
  
  	c.requestsChan = make(chan *AsyncResult, c.PendingRequests)
  	c.clientStopChan = make(chan struct{})
  
  	if c.Conns <= 0 {
  		c.Conns = 1
  	}
  	if c.Dial == nil {
  		c.Dial = defaultDial
  	}
  
  	for i := 0; i < c.Conns; i++ {
  		c.stopWg.Add(1)
  		go clientHandler(c)
  	}
  }
docs: // Start starts rpc client. Establishes connection to the server on Client.Addr.
  //
  // All the request and response types the client may use must be registered
  // via RegisterType() before starting the client.
  // There is no need in registering base Go types such as int, string, bool,
  // float64, etc. or arrays, slices and maps containing base Go types.