2016-11-15 52 views
1

私は、このような何かをマップのマップやスライス/配列が得られたクエリの多くを実行します。Golangマップ/配列(非構造体)シリアライズ

// package M 
type SX map[string]interface{} 
type IX map[int64]interface{} 
type IAX map[int64][]interface{} 
type SAX map[string][]interface{} 
type SS map[string]string 
type SF map[string]float64 
type II map[int64]int64 
type IB map[int64]bool 
type SI map[string]int64 
type IS map[int64]string 
type SB map[string]bool 

// package A 
type X []interface{} 
type MSX []map[string]interface{} 

だから私はそれをこのような何かを宣言できます。

をシリアライズのこの種の(構造体/スキーマを生成する必要はありません)をサポート encoding/gob以外 listの一つと encoding/json
// import `gitlab.com/kokizzu/gokil/A` 
// import `gitlab.com/kokizzu/gokil/M` 
values := M.SX{ 
    `orderId`: `1-12-1`, 
    `apiKey`: `16313c061a8e3288528123bd8`, 
    `country`: `360`, 
    `currency`: `360`, 
    `payType`: 1, 
    `items`: A.MSX{ 
     M.SX{ 
      `code`: `subscription for 7 days`, 
      `name`: `Bla bla`, 
      `price`: price, 
     }, 
    }, 
    `profile`: M.SX{ 
     `entry`: A.MSX{ 
      M.SX{ 
       `key`: `need_mno_id`, 
       `value`: `yes`, 
      }, 
      M.SX{ 
       `key`: `foo`, 
       `value`: `bar`, 
      }, 
     }, 
    }, 
    `profile`: A.MSX{ 
     M.SX{`foo`:`bar`,`age`:123}, 
     M.SX{`foo`:`wow`,`age`:234,`currency`:360}, 
     M.SX{`foo`:`such`,`age`:45,`is_admin`:true}, 
     M.SX{`foo`:`wow`,`age`:57,`is_deleted`:true}, 
    }, 
} 

github.com/alecthomas/binary 
github.com/davecgh/go-xdr/xdr 
github.com/Sereal/Sereal/Go/sereal 
github.com/ugorji/go/codec 
gopkg.in/vmihailenco/msgpack.v2 --> has example for enc/dec-ing a map 
labix.org/v2/mgo/bson 
github.com/tinylib/msgp (code generator for msgpack) 
github.com/golang/protobuf (generated code) 
github.com/gogo/protobuf (generated code, optimized version of goprotobuf) 
github.com/DeDiS/protobuf (reflection based) 
github.com/google/flatbuffers 
github.com/hprose/hprose-go/io 
github.com/glycerine/go-capnproto 
zombiezen.com/go/capnproto2 
github.com/andyleap/gencode 
github.com/pascaldekloe/colfer 

Gobと間違って何も(現在、私はそれらを使用する)、私はちょうど、代替の準備(または最高の1で始まる)する必要がありませんGobはもはや小型/高速ではありません(十分私はそれを使用して以来、データベースを(常にスキーマを変更する)クエリの結果は、RAM上で十分です。

+1

。 –

答えて

1

データ構造は、 データのいくつかの表として表すことができます。つまり、テーブルに正規化されます(データベーステーブルなど)。それが の場合、テーブルベースのFlatBuffersのサブセットの使用を検討してください。

私はこれを行うGoライブラリとユーティリティをリリースしました。 に必要なのは、データ構造を表形式に再設計し、 を単純な表データ形式で表し、次に がすべての接着剤を生成するユーティリティgotflatをインストールして実行します。以下のリンクは をインストールして使用する方法を示しています。私はそれが助けて欲しい本当によく働くgithub.com/golang/protobuf

https://github.com/urban-wombat/gotablesutils/releases/tag/v0.2-alpha