func read_file_stat(file string) { // arr := make([]int16,256,256) defer wg.Done() fmt.Printf("Start calc '%s'\n", file) fs := new(common.FileStat) fs.Filename = file fh, err := os.Open(file) if err != nil { return } defer fh.Close() stat, err := fh.Stat() if err != nil { return } // read the file // "eat" file by small part (not whole file if it is so big) file_size := stat.Size() var part_size int64 = BUFFER_SIZE for file_size > 0 { if file_size < part_size { file_size = part_size } bs := make([]byte, part_size) _, err = fh.Read(bs) if err != nil { return } // It can be go-routine but it will increase used memory size for _, b := range bs { fs.Inc(b) } file_size -= part_size } // str := string(bs) // fmt.Println(str) fmt.Println("Publish result ", file) results <- fs }