code: func (c *goCollector) Collect(ch chan<- Metric) {
  	ch <- MustNewConstMetric(c.goroutinesDesc, GaugeValue, float64(runtime.NumGoroutine()))
  	n, _ := runtime.ThreadCreateProfile(nil)
  	ch <- MustNewConstMetric(c.threadsDesc, GaugeValue, float64(n))
  
  	var stats debug.GCStats
  	stats.PauseQuantiles = make([]time.Duration, 5)
  	debug.ReadGCStats(&stats)
  
  	quantiles := make(map[float64]float64)
  	for idx, pq := range stats.PauseQuantiles[1:] {
  		quantiles[float64(idx+1)/float64(len(stats.PauseQuantiles)-1)] = pq.Seconds()
  	}
  	quantiles[0.0] = stats.PauseQuantiles[0].Seconds()
  	ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles)
  
  	ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1)
  
  	ms := &runtime.MemStats{}
  	runtime.ReadMemStats(ms)
  	for _, i := range c.metrics {
  		ch <- MustNewConstMetric(i.desc, i.valType, i.eval(ms))
  	}
  }
docs: // Collect returns the current state of all metrics of the collector.