我正在用GO编写一个应用程序,它使用编码/GOB在 node 之间通过UDP发送 struct 和切片.它工作得很好,但是我注意到coding/json也有类似的API.搜索并找到此信息(https://golang.org/pkg/encoding/):

GOB包GOB管理GOB流-交换的二进制值 在编码器(发送器)和解码器(接收器)之间.
JSON包JSON实现了JSON的编码和解码,如 RFC4627.

有没有人能给我解释一下是不是一种比另一种更有效率,并且通常比较一下什么时候 Select 什么?另外,如果我需要与非GO应用程序交互,我想json会更好?

推荐答案

在围棋程序之间进行交流时,GOB更受欢迎.但是,目前只在GO和C中支持gob,所以只在您确定没有其他编程语言编写的程序会try 解码这些值时才使用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

Go相关问答推荐

有没有更简单的方法在Go中编写这个逻辑?

如何使用Docker Compose配置Go,使main. go文件位于/CMD文件夹中

一种基于时间的Golang函数节制器

[0]Func()as";请勿比较哨兵类型

Go Colly-访问for循环中的URL

在Golang中Mergesort的递归/并行实现中出现死锁

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

将DATE类型的SQL字段扫描到GO struct 字段

Go 1.20 中如何计算连接错误?

Secrets Manager Update Secret - Secret String 额外的 JSON 编码

使用 Go 根据 /etc/shadow 文件中的散列密码验证密码

获取 nil 指针类型的 reflect.Value

Golang 通过接口反映/迭代{}

fmt.Printf() 标志 '0' 不会被字符串忽略

每次有人进入我的网站时如何运行特定功能?

如何在测试中使用自定义标志(使用`testify/suite`)

vs 代码调试 go 测试不通过标志

测试包外文件时的 Golang 测试覆盖率

golangci-lint 的 GitHub 操作失败,无法加载 fmt

如何解决在mac m1中运行gcc失败退出状态1?