func NewGauge(opts GaugeOpts) Gauge {
	desc := NewDesc(
		BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
		opts.Help,
		nil,
		opts.ConstLabels,
	)
	result := &gauge{desc: desc, labelPairs: desc.constLabelPairs}
	result.init(result)  
	return result
}
NewGauge creates a new Gauge based on the provided GaugeOpts.

The returned implementation is optimized for a fast Set method. If you have a
choice for managing the value of a Gauge via Set vs. Inc/Dec/Add/Sub, pick
the former. For example, the Inc method of the returned Gauge is slower than
the Inc method of a Counter returned by NewCounter. This matches the typical
scenarios for Gauges and Counters, where the former tends to be Set-heavy and
the latter Inc-heavy.
package prometheus
import (
	"math"
	"sync/atomic"
	"time"
	dto "github.com/prometheus/client_model/go"
)
type Gauge interface {
	Metric
	Collector
	Set(float64)
	Inc()
	Dec()
	Add(float64)
	Sub(float64)
	SetToCurrentTime()
}
type GaugeOpts Opts