Simple object persistence with boltdb
This package provides a persistence manager for objects backed by bbolt (orig. boltdb).
package mainimport ( "encoding/gob" "fmt" "log"
bolt "go.etcd.io/bbolt" "gopkg.in/djherbis/stow.v3" )
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{}) }
go get gopkg.in/djherbis/stow.v3