bolt/example_test.go

170 lines
3.9 KiB
Go

package bolt
import (
"fmt"
"os"
)
func init() {
os.RemoveAll("/tmp/bolt")
os.MkdirAll("/tmp/bolt", 0777)
}
func ExampleDB_Put() {
// Open the database.
var db DB
db.Open("/tmp/bolt/db_put.db", 0666)
defer db.Close()
// Create a bucket.
db.CreateBucket("widgets")
// Set the value "bar" for the key "foo".
db.Put("widgets", []byte("foo"), []byte("bar"))
// Retrieve the key back from the database and verify it.
value, _ := db.Get("widgets", []byte("foo"))
fmt.Printf("The value of 'foo' is: %s\n", string(value))
// Output:
// The value of 'foo' is: bar
}
func ExampleDB_Delete() {
// Open the database.
var db DB
db.Open("/tmp/bolt/db_delete.db", 0666)
defer db.Close()
// Create a bucket.
db.CreateBucket("widgets")
// Set the value "bar" for the key "foo".
db.Put("widgets", []byte("foo"), []byte("bar"))
// Retrieve the key back from the database and verify it.
value, _ := db.Get("widgets", []byte("foo"))
fmt.Printf("The value of 'foo' was: %s\n", string(value))
// Delete the "foo" key.
db.Delete("widgets", []byte("foo"))
// Retrieve the key again.
value, _ = db.Get("widgets", []byte("foo"))
if value == nil {
fmt.Printf("The value of 'foo' is now: nil\n")
}
// Output:
// The value of 'foo' was: bar
// The value of 'foo' is now: nil
}
func ExampleDB_Do() {
// Open the database.
var db DB
db.Open("/tmp/bolt/db_do.db", 0666)
defer db.Close()
// Execute several commands within a write transaction.
err := db.Do(func(t *RWTransaction) error {
if err := t.CreateBucket("widgets"); err != nil {
return err
}
if err := t.Put("widgets", []byte("foo"), []byte("bar")); err != nil {
return err
}
return nil
})
// If our transactional block didn't return an error then our data is saved.
if err == nil {
value, _ := db.Get("widgets", []byte("foo"))
fmt.Printf("The value of 'foo' is: %s\n", string(value))
}
// Output:
// The value of 'foo' is: bar
}
func ExampleRWTransaction() {
// Open the database.
var db DB
db.Open("/tmp/bolt/rwtransaction.db", 0666)
defer db.Close()
// Create a bucket.
db.CreateBucket("widgets")
// Create several keys in a transaction.
rwtxn, _ := db.RWTransaction()
rwtxn.Put("widgets", []byte("john"), []byte("blue"))
rwtxn.Put("widgets", []byte("abby"), []byte("red"))
rwtxn.Put("widgets", []byte("zephyr"), []byte("purple"))
rwtxn.Commit()
// Iterate over the values in sorted key order.
txn, _ := db.Transaction()
c, _ := txn.Cursor("widgets")
for k, v := c.First(); k != nil; k, v = c.Next() {
fmt.Printf("%s likes %s\n", string(k), string(v))
}
txn.Close()
// Output:
// abby likes red
// john likes blue
// zephyr likes purple
}
func ExampleRWTransaction_rollback() {
// Open the database.
var db DB
db.Open("/tmp/bolt/rwtransaction_rollback.db", 0666)
defer db.Close()
// Create a bucket.
db.CreateBucket("widgets")
// Set a value for a key.
db.Put("widgets", []byte("foo"), []byte("bar"))
// Update the key but rollback the transaction so it never saves.
rwtxn, _ := db.RWTransaction()
rwtxn.Put("widgets", []byte("foo"), []byte("baz"))
rwtxn.Rollback()
// Ensure that our original value is still set.
value, _ := db.Get("widgets", []byte("foo"))
fmt.Printf("The value for 'foo' is still: %s\n", string(value))
// Output:
// The value for 'foo' is still: bar
}
func ExampleDB_CopyFile() {
// Open the database.
var db DB
db.Open("/tmp/bolt/db_copy.db", 0666)
defer db.Close()
// Create a bucket and a key.
db.CreateBucket("widgets")
db.Put("widgets", []byte("foo"), []byte("bar"))
// Copy the database to another file.
db.CopyFile("/tmp/bolt/db_copy_2.db", 0666)
// Open the cloned database.
var db2 DB
db2.Open("/tmp/bolt/db_copy_2.db", 0666)
defer db2.Close()
// Ensure that the key exists in the copy.
value, _ := db2.Get("widgets", []byte("foo"))
fmt.Printf("The value for 'foo' in the clone is: %s\n", string(value))
// Output:
// The value for 'foo' in the clone is: bar
}