Created
May 11, 2020 22:50
-
-
Save juanhuttemann/041f351285fadc3ef35b80ee4efb6ba6 to your computer and use it in GitHub Desktop.
Boltdb 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 ( | |
"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