code: func NewBufferedSender(addr string, flushInterval time.Duration, flushBytes int) (Sender, error) {
  	simpleSender, err := NewSimpleSender(addr)
  	if err != nil {
  		return nil, err
  	}
  
  	sender := &BufferedSender{
  		flushBytes:    flushBytes,
  		flushInterval: flushInterval,
  		sender:        simpleSender,
  		buffer:        senderPool.Get(),
  		shutdown:      make(chan chan error),
  	}
  
  	sender.Start()
  	return sender, nil
  }
docs: // NewBufferedSender returns a new BufferedSender
  //
  // addr is a string of the format "hostname:port", and must be parsable by
  // net.ResolveUDPAddr.
  //
  // flushInterval is a time.Duration, and specifies the maximum interval for
  // packet sending. Note that if you send lots of metrics, you will send more
  // often. This is just a maximal threshold.
  //
  // flushBytes specifies the maximum udp packet size you wish to send. If adding
  // a metric would result in a larger packet than flushBytes, the packet will
  // first be send, then the new data will be added to the next packet.