code: func (c *connection) respWaiter(correlationID int32) (respc chan []byte, err error) {
  	c.mu.Lock()
  	defer c.mu.Unlock()
  
  	if c.stopErr != nil {
  		return nil, c.stopErr
  	}
  	if _, ok := c.respc[correlationID]; ok {
  		c.logger.Error("msg", "correlation conflict", "correlationID", correlationID)
  		return nil, fmt.Errorf("correlation conflict: %d", correlationID)
  	}
  	respc = make(chan []byte)
  	c.respc[correlationID] = respc
  	return respc, nil
  }
docs: // respWaiter register listener to response message with given correlationID
  // and return channel that single response message will be pushed to once it
  // will arrive.
  // After pushing response message, channel is closed.
  //
  // Upon connection close, all unconsumed channels are closed.