func main() { flag.Parse() g := hath.FileGenerator{ SizeMax: sizeMax, SizeMin: sizeMin, ResolutionMax: resMax, ResolutionMin: resMin, Dir: dir, } files := make(chan hath.File) worker := func(work chan hath.File) { log.Println("starting worker") for { f, err := g.New() if err != nil { log.Fatal(err) } work <- f } } for i := 0; i < workers; i++ { go worker(files) } fmt.Printf("%+v\n", g) start := time.Now() var i int64 var total int64 for i = 0; i < count; i++ { f := <-files total += f.Size fmt.Println(f) } end := time.Now() duration := end.Sub(start) totalWrote := bytefmt.ByteSize(uint64(total)) perSecond := float64(total) / duration.Seconds() rate := bytefmt.ByteSize(uint64(perSecond)) fmt.Printf("OK for %v\n", duration) fmt.Printf("%s at rate %s/s\n", totalWrote, rate) log.Println(count, "is rought", bytefmt.ByteSize(hath.GetRoughCacheSize(count))) }