2016-12-16 180 views
4

我正在编写一个应用程序,它使用编码/ gob通过UDP在节点之间发送结构和切片。它工作正常,但我注意到,编码/ JSON也有类似的API。搜查,发现此信息(https://golang.org/pkg/encoding/):golang中编码/ gob和编码/ json之间的区别

料滴包装料滴管理料滴的流 - 二进制值的编码器(发射器)和一个解码器(接收器)之间交换的 。在 RFC定义
JSON包JSON实现JSON的编码和解码4627.

有人能向我解释一个是否比其他更有效的和一般比较时,要选什么?另外,如果我需要与非golang应用程序接口,我想json会是首选?

+0

一个例子,当'gob'“赢”了'json':如何从接口解组{}的接口{}在围棋](HTTP ://stackoverflow.com/a/40823362/1705598)。也见有趣/相关的问题:[编码/ gob确定性?](http://stackoverflow.com/questions/33228700/is-encoding-gob-deterministic/33228913#33228913);和[有效的Go结构到磁盘序列化](http://stackoverflow.com/questions/37618399/efficient-go-serialization-of-struct-to-disk/37620399#37620399) – icza

回答

3

在Go程序之间进行通信时,Gob更受欢迎。然而,目前仅在Go中支持gob,并且C也是如此,所以只有在确定没有用任何其他编程语言编写的程序试图解码值时才使用gob。

说到性能,至少在我的机器上,Gob远远超过了JSON。 Test file(放在一个文件夹中对自己的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 
4

程序包编码/ gob基本上是特定的并且对其他语言不可用,但它非常高效(快速并生成小数据),并且可以正确编组和解组更多的数据结构。通过JSON与其他工具交互通常更容易。