code: func ReadDirNoExit(dirname string) ([]os.FileInfo, []error, error) {
  	if dirname == "" {
  		dirname = "."
  	}
  
  	f, err := os.Open(dirname)
  	if err != nil {
  		return nil, nil, err
  	}
  	defer f.Close()
  
  	names, err := f.Readdirnames(-1)
  	list := make([]os.FileInfo, 0, len(names))
  	errs := make([]error, 0, len(names))
  	for _, filename := range names {
  		fip, lerr := os.Lstat(dirname + "/" + filename)
  		if os.IsNotExist(lerr) {
  			// File disappeared between readdir + stat.
  			// Just treat it as if it didn't exist.
  			continue
  		}
  
  		list = append(list, fip)
  		errs = append(errs, lerr)
  	}
  
  	return list, errs, nil
  }
docs: // borrowed from ioutil.ReadDir
  // ReadDir reads the directory named by dirname and returns
  // a list of directory entries, minus those with lstat errors