2016-03-31 21 views
10

私はBoltDBとGolangを初めて使っていて、あなたの助けを得ようとしています。BoltDBにデータを保存する最も良い方法

私は、BoltDBのキーと値のバイト配列([]バイト)しか保存できないことを理解しています。私は以下のようなユーザーの構造体を持っていて、キーはユーザー名になりますが、バイト配列が必要なBoltDBにデータを格納するにはどうすればよいでしょうか?

これをシリアル化するかJSONを使用しますか?またはより良い方法ですか?

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

は良い夜

+1

[良いBoltDB例JSONまたはゴブエンコーディングを使用](https://bl.ocks.org/joyrexus/22c3ef0984ed957f54b9) – Mark

答えて

12

を持って、どうもありがとうはい、私はJSONにUser構造体をマーシャリングお勧めして、一意のキー[]byteスライスを使用します。 JSONのマーシャリングには、エクスポートされた構造体フィールドのみが含まれているので、以下のように構造体を変更する必要があることを忘れないでください。

もう1つの例は、BoltDB GitHub pageを参照してください。

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 
} 
+0

はあなたの助けをありがとう!非常に役立ちます! – Gon

+6

また、マーシャリング/アンマーシャリングよりもはるかに高速で、バージョニングのような機能を提供できるプロトコルバッファのような他のシリアル化フォーマットを調べることもできます。 –