Skip to content

Instantly share code, notes, and snippets.

@juanhuttemann
Created May 11, 2020 22:50
Show Gist options
  • Save juanhuttemann/041f351285fadc3ef35b80ee4efb6ba6 to your computer and use it in GitHub Desktop.
Save juanhuttemann/041f351285fadc3ef35b80ee4efb6ba6 to your computer and use it in GitHub Desktop.
Boltdb example
package main
import (
"encoding/json"
"fmt"
"log"
bolt "go.etcd.io/bbolt"
)
type User struct {
Username string `json:"username"`
Password string `json:"password"`
Apikey string `json:"apikey"`
}
func main() {
db, err := setupDB()
if err != nil {
log.Fatal(err)
}
defer db.Close()
user := User{Username: "admin", Password: "admin"}
err = addUser(db, "1", user)
if err != nil {
log.Fatal(err)
}
myUser := getUserByID(db, "1")
fmt.Println(myUser)
}
func setupDB() (*bolt.DB, error) {
db, err := bolt.Open("nitr.db", 0600, nil)
if err != nil {
return nil, fmt.Errorf("could not open db, %v", err)
}
err = db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte("users"))
if err != nil {
return fmt.Errorf("could not create root bucket: %v", err)
}
return nil
})
if err != nil {
return nil, fmt.Errorf("could not set up buckets, %v", err)
}
fmt.Println("DB Setup Done")
return db, nil
}
func addUser(db *bolt.DB, id string, user User) error {
userBytes, err := json.Marshal(user)
if err != nil {
return fmt.Errorf("could not marshal entry json: %v", err)
}
err = db.Update(func(tx *bolt.Tx) error {
err := tx.Bucket([]byte("users")).Put([]byte(id), []byte(userBytes))
if err != nil {
return fmt.Errorf("could not insert entry: %v", err)
}
return nil
})
fmt.Println("User added")
return err
}
func getUserByID(db *bolt.DB, id string) User {
var userData User
err := db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("users"))
user := b.Get([]byte(id))
if err := json.Unmarshal(user, &userData); err != nil {
panic(err)
}
return nil
})
if err != nil {
log.Fatal(err)
}
return userData
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment