func (m *MetricVec) WithLabelValues(lvs ...string) Metric {
	metric, err := m.GetMetricWithLabelValues(lvs...)
	if err != nil {
		panic(err)
	}
	return metric
}
WithLabelValues works as GetMetricWithLabelValues, but panics if an error
occurs. The method allows neat syntax like:
httpReqs.WithLabelValues("404", "POST").Inc()
package prometheus
import (
	"fmt"
	"sync"
	"github.com/prometheus/common/model"
)
type MetricVec struct {
	mtx      sync.RWMutex  
	children map[uint64][]metricWithLabelValues
	desc     *Desc
	newMetric   func(labelValues ...string) Metric
	hashAdd     func(h uint64, s string) uint64  
	hashAddByte func(h uint64, b byte) uint64
}
func newMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *MetricVec {
	return &MetricVec{
		children:    map[uint64][]metricWithLabelValues{},
		desc:        desc,
		newMetric:   newMetric,
		hashAdd:     hashAdd,
		hashAddByte: hashAddByte,
	}
}
type metricWithLabelValues struct {
	values []string
	metric Metric
}
func (m *MetricVec) Describe(ch chan<- *Desc) {
	ch <- m.desc
}
func (m *MetricVec) Collect(ch chan<- Metric) {
	m.mtx.RLock()
	defer m.mtx.RUnlock()
	for _, metrics := range m.children {
		for _, metric := range metrics {
			ch <- metric.metric
		}
	}
}
func (m *MetricVec) GetMetricWithLabelValues(lvs ...string) (Metric, error) {
	h, err := m.hashLabelValues(lvs)
	if err != nil {
		return nil, err
	}
	return m.getOrCreateMetricWithLabelValues(h, lvs), nil
}
func (m *MetricVec) GetMetricWith(labels Labels) (Metric, error) {
	h, err := m.hashLabels(labels)
	if err != nil {
		return nil, err
	}
	return m.getOrCreateMetricWithLabels(h, labels), nil
}