code: func expandDirectories(dirs []string) ([]string, error) {
  	const recursiveMarker = "/..."
  	resultSet := make([]string, 0)
  	for _, dir := range dirs {
  		if strings.HasSuffix(dir, recursiveMarker) {
  			err := filepath.Walk(strings.TrimSuffix(dir, recursiveMarker), func(path string, info os.FileInfo, err error) error {
  				if info.IsDir() {
  					resultSet = append(resultSet, path)
  				}
  				return nil
  			})
  			if err != nil {
  				return nil, err
  			}
  		} else {
  			info, err := os.Stat(dir)
  			if err != nil {
  				return nil, err
  			}
  			if !info.IsDir() {
  				return nil, fmt.Errorf("%q is not a directory", dir)
  			}
  			resultSet = append(resultSet, dir)
  		}
  	}
  	if len(resultSet) == 0 {
  		// treat an empty list as a search in the current directory (think "ls")
  		return []string{"."}, nil
  	}
  
  	return resultSet, nil
  }
docs: // expandDirectory verifies that each argument is actually a directory or
  // uses the special go suffix of /... to mean recursively walk from here
  // example: ./... means the current directory and all subdirectories