package main import ( "fmt" "log" "github.com/tidwall/buntdb" ) var dbFile = "data.db" var key = "test" var value = "bla" var nonExistingKey = "doesnotexist" func main() { data, _ := readDbObject(dbFile, key) fmt.Printf("read key: %s\n", data) _ = writeDbObject(dbFile, key, value) fmt.Println("written key") data, _ = readDbObject(dbFile, key) fmt.Printf("read key: %s\n", data) _ = deleteDbObject(dbFile, key) fmt.Println("deleted existing key") data, _ = readDbObject(dbFile, key) fmt.Printf("read key: %s\n", data) _ = writeDbObject(dbFile, key, value) fmt.Println("written key again") _ = shrinkDb(dbFile) fmt.Println("shrunk database") data, _ = readDbObject(dbFile, key) fmt.Printf("read key: %s\n", data) data, err := readDbObject(dbFile, nonExistingKey) if err != nil { fmt.Println(err) } fmt.Printf("read non existing key: %s\n", data) } func shrinkDb(dbFile string) (err error) { // connect to database db, err := buntdb.Open(dbFile) if err != nil { log.Fatal(err) } defer db.Close() // shrink database err = db.Shrink() if err != nil { log.Fatal(err) } defer db.Close() return nil } // readDbObject reads an object from a database func readDbObject(dbFile string, key string) (value string, err error) { // connect to database db, err := buntdb.Open(dbFile) if err != nil { log.Fatal(err) } defer db.Close() // get object err = db.View(func(tx *buntdb.Tx) error { value, err = tx.Get(key) if err != nil { return err } return err }) // return object return } // writeDbObject writes an object to a database func writeDbObject(dbFile string, key string, value string) (err error) { // connect to database db, err := buntdb.Open(dbFile) if err != nil { log.Fatal(err) } defer db.Close() // write object err = db.Update(func(tx *buntdb.Tx) error { _, _, err := tx.Set(key, value, nil) return err }) return nil } // deleteDbObject deletes an object to a database func deleteDbObject(dbFile string, dbObject string) (err error) { // connect to database db, err := buntdb.Open(dbFile) if err != nil { log.Fatal(err) } defer db.Close() // write object err = db.Update(func(tx *buntdb.Tx) error { _, err := tx.Delete(dbObject) return err }) return nil }