课程疑问?

来源:18-6 解析器的序列化

鱼右

2018-12-27

http://img.mukewang.com/szimg/5c2458140001b4e509860404.jpg

1. 老师你好, 上边的这个参数 也没有序列化呀, 它是怎么传到客户端的呢?

http://img.mukewang.com/szimg/5c2458140001bd3f09620554.jpg

2. 整篇 也没看到老师在哪里序列化的, 有点尴尬, 老师是怎么做的序列化呢?

3. 像这种struct 嵌函数的, protobuf, json 也没法直接序列化吧...

4. 老师辛苦了, 这两天在看这个 序列化, 问题真心有点多, 谢谢ccmouse老师.

写回答

1回答

ccmouse

2018-12-29

  1. 我们注意到这个不是普通的client, 是jsonrpc.Client。既然是jsonrpc.Client,它就一定会有能力把需要传输的结构序列化成一个json字符串。你可以跟踪一下这边client.Call函数。jsonrpc的库非常简单,我们很容易能够找到里面序列化的相关代码,也就是会调用Marshall。

  2. 我的课程的序列化在crawler_distributed目录里。具体在https://git.imooc.com/coding-180/coding-180/src/master/crawler_distributed/worker/types.go

  3. 对,的确不能。这种內建函数会在运行时报错。你可以试试。

  4. 没关系,能够帮同学解决问题是我的课的价值。序列化的确是比较基础但由于一般不会接触到,的确有时会比较复杂。这里我建议进一步看一下jsonrpc里的Call,找到他是如何把你的结构Marshall成字符串的。另一方面,看看我这边Serialize, Deserialize分别是如何被调用的。这两个结合起来理解。

0
1
ccmouse
补充一句,普通的http.Client的话,你发送Request,它只是收一个[]byte,我们是会需要对我们的结构体手动调用json.Marshall的。
2018-12-29
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程