code: func NewCounter(opts CounterOpts) Counter {
  	desc := NewDesc(
  		BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
  		opts.Help,
  		nil,
  		opts.ConstLabels,
  	)
  	result := &counter{desc: desc, labelPairs: desc.constLabelPairs}
  	result.init(result) // Init self-collection.
  	return result
  }
docs: // NewCounter creates a new Counter based on the provided CounterOpts.
  //
  // The returned implementation tracks the counter value in two separate
  // variables, a float64 and a uint64. The latter is used to track calls of the
  // Inc method and calls of the Add method with a value that can be represented
  // as a uint64. This allows atomic increments of the counter with optimal
  // performance. (It is common to have an Inc call in very hot execution paths.)
  // Both internal tracking values are added up in the Write method. This has to
  // be taken into account when it comes to precision and overflow behavior.