| // +build ignore,OMIT |
| |
| package main |
| |
| import ( |
| "fmt" |
| "io/ioutil" |
| "path/filepath" |
| "runtime" |
| "strings" |
| ) |
| |
| func walk(dir string, f func(string) bool) bool { |
| fis, err := ioutil.ReadDir(dir) |
| if err != nil { |
| panic(err) |
| } |
| // parse all *.go files in directory; |
| // traverse subdirectories, but don't walk into testdata |
| for _, fi := range fis { |
| path := filepath.Join(dir, fi.Name()) |
| if fi.IsDir() { |
| if fi.Name() != "testdata" { |
| if !walk(path, f) { |
| return false |
| } |
| } |
| } else if strings.HasSuffix(fi.Name(), ".go") && !strings.HasPrefix(fi.Name(), ".") { |
| if !f(path) { |
| return false |
| } |
| } |
| } |
| return true |
| } |
| |
| func walkStdLib(f func(filename string) bool) { |
| walk(filepath.Join(runtime.GOROOT(), "src"), f) |
| } |
| |
| func _() { |
| // example START OMIT |
| n := 0 |
| println := func(s string) bool { |
| fmt.Println(n, s) |
| n++ |
| return n < 10 |
| } |
| walkStdLib(println) |
| // example END OMIT |
| } |
| |
| func main() { |
| // main START OMIT |
| n := 0 |
| walkStdLib(func(s string) bool { |
| fmt.Println(n, s) |
| n++ |
| return n < 10 |
| }) |
| // main END OMIT |
| } |