code: func (s *Client) submit(stat, vprefix string, value interface{}, suffix string, rate float32) error {
  	data := bufPool.Get()
  	defer bufPool.Put(data)
  
  	if s.prefix != "" {
  		data.WriteString(s.prefix)
  		data.WriteString(".")
  	}
  
  	data.WriteString(stat)
  	data.WriteString(":")
  
  	if vprefix != "" {
  		data.WriteString(vprefix)
  	}
  
  	// sadly, no way to jam this back into the bytes.Buffer without
  	// doing a few allocations... avoiding those is the whole point here...
  	// so from here on out just use it as a raw []byte
  	b := data.Bytes()
  
  	switch v := value.(type) {
  	case string:
  		b = append(b, v...)
  	case int64:
  		b = strconv.AppendInt(b, v, 10)
  	case float64:
  		b = strconv.AppendFloat(b, v, 'f', -1, 64)
  	default:
  		return fmt.Errorf("No matching type format")
  	}
  
  	if suffix != "" {
  		b = append(b, suffix...)
  	}
  
  	if rate < 1 {
  		b = append(b, "|@"...)
  		b = strconv.AppendFloat(b, float64(rate), 'f', 6, 32)
  	}
  
  	_, err := s.sender.Send(b)
  	return err
  }
docs: // submit an already sampled raw stat