bolt.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package storage
  2. import (
  3. "fmt"
  4. "github.com/boltdb/bolt"
  5. "log"
  6. )
  7. type BoltSdk struct {
  8. bucket []byte
  9. db *bolt.DB
  10. }
  11. func NewBoltSdk() *BoltSdk {
  12. db, err := bolt.Open("transcoder.db", 0600, nil)
  13. if err != nil {
  14. log.Fatal(err)
  15. }
  16. bucket := []byte("transcoder")
  17. _ = db.Update(func(tx *bolt.Tx) error {
  18. _, err := tx.CreateBucketIfNotExists(bucket)
  19. if err != nil && err != bolt.ErrBucketExists {
  20. fmt.Println(err)
  21. }
  22. return err
  23. })
  24. return &BoltSdk{
  25. db: db,
  26. bucket: bucket,
  27. }
  28. }
  29. func (s *BoltSdk) Set(key, value string) (err error) {
  30. err = s.db.Update(func(tx *bolt.Tx) error {
  31. bucket := tx.Bucket(s.bucket)
  32. if bucket == nil {
  33. return fmt.Errorf("bucket not found")
  34. }
  35. return bucket.Put([]byte(key), []byte(value))
  36. })
  37. return
  38. }
  39. func (s *BoltSdk) Get(key string) (value string, err error) {
  40. err = s.db.View(func(tx *bolt.Tx) error {
  41. bts := tx.Bucket(s.bucket).Get([]byte(key))
  42. value = string(bts)
  43. return nil
  44. })
  45. return
  46. }
  47. func (s *BoltSdk) GetFirst() (key, value string, err error) {
  48. err = s.db.Update(func(tx *bolt.Tx) error {
  49. cursor := tx.Bucket(s.bucket).Cursor()
  50. k, v := cursor.First()
  51. key = string(k)
  52. value = string(v)
  53. return nil
  54. })
  55. return
  56. }
  57. func (s *BoltSdk) Delete(key string) (err error) {
  58. err = s.db.Update(func(tx *bolt.Tx) error {
  59. return tx.Bucket(s.bucket).Delete([]byte(key))
  60. })
  61. return
  62. }