簡體   English   中英

在 BoltDB 中存儲數據的最佳方式

[英]Best way to store data in BoltDB

我是 BoltDB 和 Golang 的新手,並試圖獲得您的幫助。

所以,我知道我只能為 BoltDB 的鍵和值保存字節數組 ([]byte)。 如果我有一個如下所示的用戶結構,並且鍵將是用戶名,那么將數據存儲到需要字節數組的 BoltDB 中的最佳選擇是什么?

序列化它還是 JSON? 或者更好的方法?

type User struct {
    name string
    age  int
    location string
    password string
    address string 
}

非常感謝,晚上好

是的,我建議將User結構編組為 JSON,然后使用唯一鍵[]byte切片。 不要忘記封送至 JSON 僅包括導出的結構字段,因此您需要更改結構,如下所示。

另一個示例,請參閱BoltDB GitHub 頁面

type User struct {
    Name string
    Age  int
    Location string
    Password string
    Address string 
}

func (user *User) save(db *bolt.DB) error {
    // Store the user model in the user bucket using the username as the key.
    err := db.Update(func(tx *bolt.Tx) error {
        b, err := tx.CreateBucketIfNotExists(usersBucket)
        if err != nil {
            return err
        }    

        encoded, err := json.Marshal(user)
        if err != nil {
            return err
        }
        return b.Put([]byte(user.Name), encoded)
    })
    return err
}

一個不錯的選擇是 Storm 包,它可以准確地執行您想要做的事情:

package main

import (
   "fmt"
   "github.com/asdine/storm/v3"
)

type user struct {
   ID int `storm:"increment"`
   address string
   age int
}

func main() {
   db, e := storm.Open("storm.db")
   if e != nil {
      panic(e)
   }
   defer db.Close()
   u := user{address: "123 Main St", age: 18}
   db.Save(&u)
   fmt.Printf("%+v\n", u) // {ID:1 address:123 Main St age:18}
}

如您所見,您不必擔心編組,它會為您處理。 默認情況下,它使用 JSON,但您也可以將其配置為使用 GOB 或其他:

https://github.com/asdine/storm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM