Skip to content

Instantly share code, notes, and snippets.

@dannietjoh
Last active September 27, 2022 04:52
Show Gist options
  • Select an option

  • Save dannietjoh/7783bf5264ed53c79c9badb9550f6c46 to your computer and use it in GitHub Desktop.

Select an option

Save dannietjoh/7783bf5264ed53c79c9badb9550f6c46 to your computer and use it in GitHub Desktop.
buntdb example
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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment