type Metrics struct { AverageLatency float64 RequestCount int64 ErrorCount int64 } func AverageLatency(host string) Metrics { REQUESTS_LIMIT := 100 var errors int64 results := make([]int64, 0, DEFAULT_REQUESTS_LIMIT) var wg sync.WaitGroup wg.Add(REQUESTS_LIMIT) for j := 0; j < REQUESTS_LIMIT; j++ { go func() { defer wg.Done() start := time.Now() if _, err := net.LookupHost(host); err != nil { fmt.Printf("%s", err.Error()) atomic.AddInt64(&errors, 1) return } append(results, time.Since(start).Nanoseconds() / int64(time.Millisecond)) } } wg.Wait() return CalculateStats(&results, &errors) }