https://github.com/src-d/go-billy
The missing interface filesystem abstraction for Go
https://github.com/src-d/go-billy
abstraction filesystem golang
Last synced: 3 days ago
JSON representation
The missing interface filesystem abstraction for Go
- Host: GitHub
- URL: https://github.com/src-d/go-billy
- Owner: src-d
- License: apache-2.0
- Created: 2016-12-07T15:32:53.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2021-07-11T00:08:25.000Z (over 4 years ago)
- Last Synced: 2025-04-21T03:43:14.386Z (8 months ago)
- Topics: abstraction, filesystem, golang
- Language: Go
- Homepage: https://godoc.org/gopkg.in/src-d/go-billy.v4
- Size: 192 KB
- Stars: 201
- Watchers: 9
- Forks: 42
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## WE CONTINUE THE DEVELOPMENT AT [go-git/go-billy](https://github.com/go-git/go-billy). This repository is abandoned, and no further updates will be done on the code base, nor issue/prs will be answered or attended.
# go-billy [](https://godoc.org/gopkg.in/src-d/go-billy.v4) [](https://travis-ci.com/src-d/go-billy) [](https://ci.appveyor.com/project/mcuadros/go-billy) [](https://codecov.io/gh/src-d/go-billy)
The missing interface filesystem abstraction for Go.
Billy implements an interface based on the `os` standard library, allowing to develop applications without dependency on the underlying storage. Makes it virtually free to implement mocks and testing over filesystem operations.
Billy was born as part of [src-d/go-git](https://github.com/src-d/go-git) project.
## Installation
```go
go get -u gopkg.in/src-d/go-billy.v4/...
```
## Usage
Billy exposes filesystems using the
[`Filesystem` interface](https://godoc.org/github.com/src-d/go-billy#Filesystem).
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.
```go
func LoadToMemory(origin billy.Filesystem, path string) (*memory.Memory, error) {
memory := memory.New()
files, err := origin.ReadDir("/")
if err != nil {
return nil, err
}
for _, file := range files {
if file.IsDir() {
continue
}
src, err := origin.Open(file.Name())
if err != nil {
return nil, err
}
dst, err := memory.Create(file.Name())
if err != nil {
return nil, err
}
if _, err = io.Copy(dst, src); err != nil {
return nil, err
}
if err := dst.Close(); err != nil {
return nil, err
}
if err := src.Close(); err != nil {
return nil, err
}
}
return memory, nil
}
```
## Why billy?
The library billy deals with storage systems and Billy is the name of a well-known, IKEA
bookcase. That's it.
## License
Apache License Version 2.0, see [LICENSE](LICENSE)