https://github.com/rovergulf/storage
File system / Cloud storage Golang driver
https://github.com/rovergulf/storage
cloud-storage-driver file-storage-driver fs go go-lib otel-supported s3
Last synced: 5 months ago
JSON representation
File system / Cloud storage Golang driver
- Host: GitHub
- URL: https://github.com/rovergulf/storage
- Owner: rovergulf
- License: mit
- Created: 2024-06-13T14:37:28.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-08-15T17:49:33.000Z (10 months ago)
- Last Synced: 2025-09-30T22:35:45.731Z (8 months ago)
- Topics: cloud-storage-driver, file-storage-driver, fs, go, go-lib, otel-supported, s3
- Language: Go
- Homepage:
- Size: 57.6 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README


# storage
This repository contains source code for file storage,
supporting local file storage and cloud remote ones.
### Install module
```shell
go get github.com/rovergulf/storage
```
### Example
```go
package main
import (
"context"
"log"
"github.com/rovergulf/storage"
)
func main() {
ctx := context.Background()
storagePath := "/temp/my-storage"
fs, err := storage.NewStorage(
storage.WithBackends(storage.LocalBackends),
storage.WithPrefix(storagePath),
)
if err != nil {
log.Fatal(err)
}
fileData := []byte(`{"example": "hello world"}`)
fileName := "example.json"
// check if file key already exists
if exists, _ := fs.Exists(ctx, fileName); exists {
log.Printf("'%s' already exists", fileName)
return
}
// upload data
uploadErr := fs.Put(ctx, fileName, fileData)
if uploadErr != nil {
log.Fatalf("Unable to upload to '%s': %s", fileName, err)
// handle uploadErr
}
}
```
### OpenTelemetry support
This package supports [OpenTelemetry](https://opentelemetry.io) tracer spans.
Visit [opentelemetry-go examples](https://github.com/open-telemetry/opentelemetry-go/tree/main/example) to install tracer provider and provide tracer as storage `storage.WithTracer` option
```go
package main
import (
...
"go.opentelemetry.io/otel"
"github.com/rovergulf/storage"
)
func main() {
tracer := otel.Tracer("go-storage")
fs, err := storage.NewStorage(
...,
storage.WithTracer(tracer),
)
if err != nil {
// handle err
}
}
```