code: func New(opts ...Option) *Factory {
  	options := applyOptions(opts)
  	return newFactory(
  		&Factory{ // dummy struct to be discarded
  			cache:      newVectorCache(options.registerer),
  			buckets:    options.buckets,
  			normalizer: strings.NewReplacer(".", "_", "-", "_"),
  			separator:  options.separator,
  		},
  		"",  // scope
  		nil) // tags
  }
docs: // New creates a Factory backed by Prometheus registry.
  // Typically the first argument should be prometheus.DefaultRegisterer.
  //
  // Parameter buckets defines the buckets into which Timer observations are counted.
  // Each element in the slice is the upper inclusive bound of a bucket. The
  // values must be sorted in strictly increasing order. There is no need
  // to add a highest bucket with +Inf bound, it will be added
  // implicitly. The default value is prometheus.DefBuckets.