An interface to abstract several storages.
This library was extracted from src-d/go-git.
go get -u gopkg.in/src-d/go-billy.v2/...
The library billy deals with storage systems and Billy is the name of a well-known, IKEA bookcase. That's it.
Billy exposes filesystems using the
Filesystem
interface.
Each filesystem implementation gives you a New
method, whose arguments depend on
the implementation itself, that returns a new Filesystem
.
The following example caches in memory all readable files in a directory from any billy's filesystem implementation.
func LoadToMemory(fs billy.Filesystem, path string) (*memory.Memory, error) {
memory := memory.New()
files, err := fs.ReadDir("/")
if err != nil {
return nil, err
}
for _, file := range files {
if !file.IsDir() {
orig, err := fs.Open(file.Name())
if err != nil {
continue
}
dest, err := memory.Create(file.Name())
if err != nil {
continue
}
if _, err = io.Copy(dest, orig); err != nil {
return nil, err
}
}
}
return memory, nil
}
MIT, see LICENSE