Awesome
Stow
Usage
This package provides a persistence manager for objects backed by bbolt (orig. boltdb).
package main
import (
"encoding/gob"
"fmt"
"log"
bolt "go.etcd.io/bbolt"
"github.com/djherbis/stow/v4"
)
func main() {
// Create a boltdb (bbolt fork) database
db, err := bolt.Open("my.db", 0600, nil)
if err != nil {
log.Fatal(err)
}
// Open/Create a Json-encoded Store, Xml and Gob are also built-in
// We'll store a greeting and person in a boltdb bucket named "people"
peopleStore := stow.NewJSONStore(db, []byte("people"))
peopleStore.Put("hello", Person{Name: "Dustin"})
peopleStore.ForEach(func(greeting string, person Person) {
fmt.Println(greeting, person.Name)
})
// Open/Create a Gob-encoded Store. The Gob encoding keeps type information,
// so you can encode/decode interfaces!
sayerStore := stow.NewStore(db, []byte("greetings"))
var sayer Sayer = Person{Name: "Dustin"}
sayerStore.Put("hello", &sayer)
var retSayer Sayer
sayerStore.Get("hello", &retSayer)
retSayer.Say("hello")
sayerStore.ForEach(func(sayer Sayer) {
sayer.Say("hey")
})
}
type Sayer interface {
Say(something string)
}
type Person struct {
Name string
}
func (p Person) Say(greeting string) {
fmt.Printf("%s says %s.\n", p.Name, greeting)
}
func init() {
gob.Register(&Person{})
}
Installation
go get github.com/djherbis/stow/v4