翻译进度
2
分块数量
2
参与人数

19.7. 使用 Json 来存储

这是一篇社区协同翻译的文章,你可以点击右边区块信息里的『改进』按钮向译者提交改进建议。

如果你是一个敏锐的测试人员,也许你已经注意到,当 goto 第 2 次启动的时候,它有短 urls 并且可以完美运行,然而从第 3 次开始,我们会收到这个错误: Error loading URLStore: extra data in buffer. This is because gob is a stream based protocol that doesn't support restarting 。这里我们将通过使用 json 作为存储协议,来弥补这种情况( 参见 章节 12.9 ),它将数据存储成纯文本,因此他也可以被 Go 以外的其他语言编写的进程读取。这也展示了转换不同的持久协议是多么的容易,因为处理存储的代码在两种方法中彻底分离,即 load 和 saveLoop 。

首先创建一个新的空文件 store.json ,并且改变 main.go 中变量文件声明的那一行:


var dataFile = flag.String("file", "store.json", "data store file name")
BroQiang 翻译于 6个月前

在 store.go 中将导入 gob 替换成 导入 json 。然后在 saveLoop 只需要修改这行:


e := gob.NewEncoder(f)

我们将它改成: e := json.NewEncoder(f)

同样的,在 load 方法中修改这行: d := gob.NewDecoder(f)

将它改成: d := json.NewDecoder(f)

这是我们要改变的所有内容! 编译、启动并测试: 你将看到,之前的错误不会再出现。

版本 5 —— 分布式程序:

第 5 版的 goto_5 代码(将在 章节 19.8 章节 19.9 中讨论)能够在 code_examples\chapter_19\goto_v5 中找到。这个版本中继续使用 gob 存储,但是它可以很容易的去适配 josn ,就像在版本 4 中的演示。

BroQiang 翻译于 6个月前

本文章首发在 GolangCaff
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

参与译者:2
讨论数量: 0
发起讨论


暂无话题~