метод WithLabelValues - компилятор это не принимает и говорит "metricVec.WithLabelValues undefined (type T has no field or method WithLabelValues)" ?
func GetCounterFromSet[T *prometheus.CounterVec](ms *MetricSet, metricLabels RawLabels) (metric prometheus.Counter) {
metricVec := ms.mvec.(T)
dflts := ms.DefaultLabels
lbls := metricLabels.String()
if pm, ok := ms.Metrics[lbls]; ok {
metric = (*pm).(prometheus.Counter)
} else {
metric = metricVec.WithLabelValues(getValsForLabels(metricLabels, dflts)...).(prometheus.Counter)
mm := metric.(prometheus.Metric)
ms.Metrics[lbls] = &mm
}
return
}
на дженерике можно максимум вызвать методы, к полям доступ не получить, да и в такой конфигурации как у вас он не имеет никакого смысла
Ну, исходно там было T *prometheus.Counter | *prometheus.Gauge
Обсуждают сегодня