LoginSignup
0

More than 5 years have passed since last update.

vmihailenco/msgpackの非互換に対応する

Last updated at Posted at 2018-12-25

vmihailenco/msgpackの非互換に対応する

Goで使ってるMessagePackのライブラリで非互換な更新があってそれに対応したメモです。

そもそもの非互換

従来の挙動: 数値型を可能な限り小さい数値型表現で格納していた。
現在の挙動: #198でデフォルトではGoの型に対応する数値型表現で格納されるようになった。

例で示すと:

var v int64 = 10
b, err := msgpack.Marshal(v)
// 従来: `b` は埋め込み整数型
// 現在: `b` はint64_t表現型

のような感じになっています。
テストで一応確認してたので、どうゆうわけかテストが失敗していて気づきました。

対処方法

var buf bytes.Buffer
var v int64 = 10
enc := msgpack.NewEncoder(&buf).UseCompactEncoding(true)
err := enc.Encode(v)
b := buf.Bytes()
// 従来どおりの `b` が生成されている

といった、 msgpack.Encoder を使った方法に切り替えます。
3行くらい増えるので若干めんどうになります。

総評とか

Goでの Encode / Decode 操作はストリーム型を使った方が効率的になることもあるので、たまには使ってみるのもよいかと思います。
長くなるのでめんどうですが。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0