15

ノード間でUDP経由で構造とスライスを送信するためにencoding/gobを使用するGoでアプリケーションを書いています。正常に動作しますが、encoding/json にも同様の API があることに気付きました。この情報を検索して見つけました( https://golang.org/pkg/encoding/ ):

gob パッケージ gob は、エンコーダー (送信機) とデコーダー (受信機) の間で交換されるバイナリ値であるゴブのストリームを管理します。
json パッケージ json は、RFC 4627 で定義されている JSON のエンコードとデコードを実装します。

誰かが私に一方が他方よりも効率的であるかどうかを説明し、一般的にいつ何を選択するかを比較できますか? また、Go 以外のアプリケーションとやり取りする必要がある場合は、json が優先されると思いますか?

4

2 に答える 2

24

Go プログラム間で通信する場合は、Gob の方がはるかに好まれます。ただし、 gob は現在 Go とCでのみサポートされているため、他のプログラミング言語で記述されたプログラムが値をデコードしようとしないことが確実な場合にのみ使用してください。

パフォーマンスに関して言えば、少なくとも私のマシンでは、Gob は JSON よりはるかに優れています。テストファイル(GOPATH の下の独自のフォルダーに入れます)

$ go test -bench=.        
testing: warning: no tests to run
BenchmarkGobEncoding-4           1000000              1172 ns/op
BenchmarkJSONEncoding-4           500000              2322 ns/op
BenchmarkGobDecoding-4           5000000               486 ns/op
BenchmarkJSONDecoding-4           500000              3228 ns/op
PASS
ok      testencoding    6.814s
于 2016-12-16T09:04:58.697 に答える