// go run v3.go -- $PWD package main import ( "bufio" "flag" "fmt" "os" "path/filepath" ) // START global OMIT var globalLineCount int // END global OMIT func lineCount(path string) (int, error) { f, err := os.Open(path) if err != nil { return 0, err } defer f.Close() r := bufio.NewReader(f) var lc int for err == nil { _, err = r.ReadString('\n') if err == nil { lc++ } } return lc, nil } // START visit OMIT func visit(path string, fi os.FileInfo, err error) error { if err != nil { return err } if !fi.Mode().IsRegular() { return nil } go func() { // HL lc, err := lineCount(path) if err != nil { fmt.Errorf("%s", err) } globalLineCount += lc fmt.Printf("%d\t%s\n", lc, path) }() // HL return nil } // END visit OMIT func main() { flag.Parse() root := flag.Arg(0) err := filepath.Walk(root, visit) if err != nil { fmt.Errorf("%s", err) os.Exit(1) } fmt.Printf("%d\ttotal\n", globalLineCount) }