package main import ( "fmt" "io" "io/ioutil" "os" "sort" ) var searchList = make([]FS, 0) // read the first file matching path in the search list func read(path string) (ba []byte, err error) { for _, fs := range searchList { var r io.ReadCloser r, err = fs.Open(path) if os.IsNotExist(err) { continue } if err != nil { return } defer r.Close() return ioutil.ReadAll(r) } err = fmt.Errorf("%s: %w", path, os.ErrNotExist) return } func listBase(path string) ([]string, error) { return fsFS{base}.List(path) } func listMerged(path string) (entries []string, err error) { seen := map[string]bool{} for _, fs := range searchList { var fsEnts []string fsEnts, err = fs.List(path) if os.IsNotExist(err) { err = nil continue } if err != nil { return } for _, ent := range fsEnts { if !seen[ent] { entries = append(entries, ent) seen[ent] = true } } } sort.Strings(entries) return }