Last active
September 27, 2022 04:52
-
-
Save dannietjoh/7783bf5264ed53c79c9badb9550f6c46 to your computer and use it in GitHub Desktop.
buntdb example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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