code: func (w *Walker) Step() bool {
  	if w.descend && w.cur.err == nil && w.cur.info.IsDir() {
  		list, err := w.fs.ReadDir(w.cur.path)
  		if err != nil {
  			w.cur.err = err
  			w.stack = append(w.stack, w.cur)
  		} else {
  			for i := len(list) - 1; i >= 0; i-- {
  				path := w.fs.Join(w.cur.path, list[i].Name())
  				w.stack = append(w.stack, item{path, list[i], nil})
  			}
  		}
  	}
  
  	if len(w.stack) == 0 {
  		return false
  	}
  	i := len(w.stack) - 1
  	w.cur = w.stack[i]
  	w.stack = w.stack[:i]
  	w.descend = true
  	return true
  }
docs: // Step advances the Walker to the next file or directory,
  // which will then be available through the Path, Stat,
  // and Err methods.
  // It returns false when the walk stops at the end of the tree.