package main import ( "fmt" "log" "os" ) func index() *os.File { tmp0, err := os.CreateTemp(TmpDir, "glocate-idx") if err != nil { log.Fatalln(err) } defer os.Remove(tmp0.Name()) entsWalker := make(chan Ent, 1<<10) entsWriter := make(chan Ent, 1<<10) dirSizerJob := make(chan struct{}) var dirSizes []int64 entsWalker <- Ent{name: []string{"./"}} sinkBack := make(chan Ent, 1) go func() { dirSizer(&dirSizes, 1, sinkBack, entsWalker, entsWriter) close(dirSizerJob) }() writerJob := make(chan struct{}) go func() { writer(tmp0, entsWriter) close(writerJob) }() walkerStatusStop := make(chan struct{}) go walkerStatus(walkerStatusStop) err = walker(entsWalker, []string{"./"}) walkerStatusStop <- struct{}{} <-walkerStatusStop fmt.Print("\r") if err != nil { log.Fatalln(err) } close(entsWalker) <-dirSizerJob close(entsWriter) <-writerJob tmp1 := applyDirSizes(tmp0, dirSizes) tmp0.Close() return tmp1 }