code: func walk(fs http.FileSystem, path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
  	err := walkFn(path, info, nil)
  	if err != nil {
  		if info.IsDir() && err == filepath.SkipDir {
  			return nil
  		}
  		return err
  	}
  
  	if !info.IsDir() {
  		return nil
  	}
  
  	names, err := readDirNames(fs, path)
  	if err != nil {
  		return walkFn(path, info, err)
  	}
  
  	for _, name := range names {
  		filename := pathpkg.Join(path, name)
  		fileInfo, err := Stat(fs, filename)
  		if err != nil {
  			if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
  				return err
  			}
  		} else {
  			err = walk(fs, filename, fileInfo, walkFn)
  			if err != nil {
  				if !fileInfo.IsDir() || err != filepath.SkipDir {
  					return err
  				}
  			}
  		}
  	}
  	return nil
  }
docs: // walk recursively descends path, calling walkFn.