code: func Walk(path string, followSymlinks bool, detectSymlinkInfiniteLoop bool, walkFn WalkFunc) error {
  	info, err := os.Lstat(path)
  	if err != nil {
  		return err
  	}
  	var symlinkPathsFollowed map[string]bool
  	var resolvedPath string
  	if followSymlinks {
  		resolvedPath = path
  		if detectSymlinkInfiniteLoop {
  			symlinkPathsFollowed = make(map[string]bool, 8)
  		}
  	}
  	return walk(path, info, resolvedPath, symlinkPathsFollowed, walkFn)
  }
docs: //Walk walks a path, optionally following symbolic links, and for each path,
  //it calls the walkFn passed.
  //
  //It is similar to filepath.Walk, except that it supports symbolic links and
  //can detect infinite loops while following sym links.
  //It solves the issue where your WalkFunc needs a path relative to the symbolic link
  //(resolving links within walkfunc loses the path to the symbolic link for each traversal).